powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Сложное условие в WHERE
8 сообщений из 8, страница 1 из 1
Сложное условие в WHERE
    #35828192
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 )

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

Код: 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
Сложное условие в WHERE
    #35828227
Leron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробовал, а в ответ мне:
ОШИБКА #5540: SQLCODE: -357 Сообщение: Пользовательская SQL-функция 'Temp.Query_MyQuery' ссылается на процедуру, которая не определена как функция
...
Рейтинг: 0 / 0
Сложное условие в WHERE
    #35828760
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[Home] > [Configuration] > [SQL Settings]->Allow Extrinsic Functions in SQL Statements=Yes
[Домашняя страница] > [Конфигурация] > [Настройки SQL] >Разрешить вызов внешних функций в SQL инструкциях=Да

И пример из документации SELECT $$REFORMAT^ABC(name) FROM MyTable
...
Рейтинг: 0 / 0
Сложное условие в WHERE
    #35829050
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это может навести на мысль:
http://karataev.nm.ru/cache/sqlin.html + http://karataev.nm.ru/cache/expand.html
...
Рейтинг: 0 / 0
Сложное условие в WHERE
    #35829300
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот такой запрос я использую при работе с 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
Сложное условие в WHERE
    #35837995
CJIECAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Сложное условие в WHERE
    #35838272
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Leron
Для варианта с %INLIST нужно только помнить, что максимально возможное количество элементов в $LB() ограничено.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Сложное условие в WHERE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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