Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Сложное условие в WHERE / 8 сообщений из 8, страница 1 из 1
19.02.2009, 18:16
    #35828192
Leron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложное условие в WHERE
Есть хранимая процедура, написана на COS, возвращает список идентификаторов класса ClassA

Код: plaintext
1.
2.
3.
4.
5.
Class Temp.Query Extends %RegisteredObject
{
MyQuery (Arg1 As %Integer, Arg2 As %String)As %Library.Query(ROWSPEC = "ID:%String") [ SqlProc ]
{
}
}

нужно в другом запросе сделать что-то типа

Код: plaintext
select ID,Field1,Field2,Field3 from Temp.ClassA where ID in Temp.Query_MyQuery( 1 , 2 )

собственно так нельзя сделать, а очень хотелось бы, может есть способы?
...
Рейтинг: 0 / 0
19.02.2009, 18:24
    #35828210
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложное условие в WHERE
может так:?

Код: plaintext
1.
2.
select ID,Field1,Field2,Field3 from Temp.ClassA 
where ID in (SELECT Temp.Query_MyQuery( 1 , 2 ) from Temp.ClassA)
...
Рейтинг: 0 / 0
19.02.2009, 18:34
    #35828227
Leron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложное условие в WHERE
попробовал, а в ответ мне:
ОШИБКА #5540: SQLCODE: -357 Сообщение: Пользовательская SQL-функция 'Temp.Query_MyQuery' ссылается на процедуру, которая не определена как функция
...
Рейтинг: 0 / 0
20.02.2009, 07:36
    #35828760
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложное условие в WHERE
[Home] > [Configuration] > [SQL Settings]->Allow Extrinsic Functions in SQL Statements=Yes
[Домашняя страница] > [Конфигурация] > [Настройки SQL] >Разрешить вызов внешних функций в SQL инструкциях=Да

И пример из документации SELECT $$REFORMAT^ABC(name) FROM MyTable
...
Рейтинг: 0 / 0
20.02.2009, 10:31
    #35829050
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложное условие в WHERE
Вот это может навести на мысль:
http://karataev.nm.ru/cache/sqlin.html + http://karataev.nm.ru/cache/expand.html
...
Рейтинг: 0 / 0
20.02.2009, 11:46
    #35829300
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложное условие в WHERE
вот такой запрос я использую при работе с tablePane (возвращает несколько результируемых строк)
queryClass=""
queryName=""

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Class RTT.RapidQuerys [ Abstract ]
{

Query findPL(findFIO As %String) As %Query(ROWSPEC = "%ID:%String")
{
}

ClassMethod findPLExecute(ByRef qHandle As %Binary, findFIO As %String) As %Status
{
  /* текст запроса */
  s qHandle=""
  Quit $$$OK
}

ClassMethod findPLClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = NewQuery1Execute ]
{
  k ^||Result
  Quit $$$OK
}

ClassMethod findPLFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer =  0 ) As %Status [ PlaceAfter = NewQuery1Execute ]
{
	s qHandle=$O(^||Result(qHandle))
	if (qHandle)="" {
		s AtEnd =  1 
		s Row = ""
	}
	else {s Row = $G(^||Result(qHandle))	}
	Quit $$$OK
}
}

если нужно вернуть одно значение , то нужно написать функцию, например:

Код: plaintext
1.
2.
3.
4.
5.
/// возвращает  1 , если этот пол соответствует заданному
ClassMethod GetSex(sex, par) As %Integer [ SqlProc ]
{
	if par= 1  q:sex= 1   1  q  0 
	if par= 2  q:sex= 2   1  q  0 
}
тогда SQL выглядит так:
Код: plaintext
1.
select sum(Test.tt_GetSex(sex, 1 )) As M, sum(Test.tt_GetSex(sex, 2 )) As F 
from T1 
...
Рейтинг: 0 / 0
25.02.2009, 23:24
    #35837995
CJIECAPb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложное условие в WHERE
LeronЕсть хранимая процедура, написана на COS, возвращает список идентификаторов класса ClassA

Код: plaintext
1.
2.
3.
4.
5.
Class Temp.Query Extends %RegisteredObject
{
MyQuery (Arg1 As %Integer, Arg2 As %String)As %Library.Query(ROWSPEC = "ID:%String") [ SqlProc ]
{
}
}

нужно в другом запросе сделать что-то типа

Код: plaintext
select ID,Field1,Field2,Field3 from Temp.ClassA where ID in Temp.Query_MyQuery( 1 , 2 )

собственно так нельзя сделать, а очень хотелось бы, может есть способы?

Сделай хранимую процедуру (класс-метод с параметром [ SqlProc ], а не запрос), которая будет возвращать $LB() от списка идентификаторов, и перепиши запрос следующим образом:
Код: plaintext
select ID,Field1,Field2,Field3 from Temp.ClassA where ID %INLIST Temp.Query_MyProc( 1 , 2 )
...
Рейтинг: 0 / 0
26.02.2009, 08:38
    #35838272
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложное условие в WHERE
To Leron
Для варианта с %INLIST нужно только помнить, что максимально возможное количество элементов в $LB() ограничено.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Сложное условие в WHERE / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]