powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
12 сообщений из 12, страница 1 из 1
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35201963
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как написать запрос класса на COS.
В документации дан пример на SQL, но из этого примера не видно, как реализовать нечто подобное на COS.
Или ткните, где искать в документации, а то я что-то найти не могу.

Виктор
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35202173
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см.

http://docs.intersystems.com/cache20071/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_queries#GOBJ_C2481

Примеры есть например в пакете %Dictionary, названия классов заканчиваются на Query

=Сергей Шутов (logist)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35202322
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hisbreht VictorКак написать запрос класса на COS.
Я что-то ничего не понял... Что нужно-то? Сделать запрос в классе (классовый запрос)? Сделать запрос к классу на COS?
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35202756
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формулировка вопроса не совсем четкая, но вот еще есть на эту тему, может чем поможет.

http://karataev.nm.ru/cache/sqlin.html
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35204166
LenRover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну если я правильно поняла, надо сделать так, чтобы результат работы метода можно было запихнуть в sql запрос?

если так, то это можно сделать след. образом:

пишем метод . Главное чтобы у него был [SqlProc]

Class Test.Class Extends %Persistent
{
ClassMethod MethodTest(par) As %String [SqlProc]
{
// тут что-нить делаем и возвращаем например строку.
}
}

далее тогда в sql запросе можно будет вызывать этот метод:
select * from table where str=(Test.Class_MethodTest('какая-нить строка')='то что возвращает метод')
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35204481
ГР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hisbreht VictorКак написать запрос класса на COS.
В документации дан пример на SQL, но из этого примера не видно, как реализовать нечто подобное на COS.
Или ткните, где искать в документации, а то я что-то найти не могу.

Виктор

Если на COS без &sql, то может просто пользовать класс %ResultSet.
set a="1,2,222,3333"
...
d rs.Prepare("select .... in ("_a_")")
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35204703
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы, есть интересные моменты, которыми можно воспользоваться.
ну яФормулировка вопроса не совсем четкая
Формулировка - это, конечно, да. Долго вспоминал, как все это правильно называется. Да еще неверно перевел документацию на английском (от усталости, наверное).

Попробую отдохнувши более четко сформулировать вопрос. Точнее, он выливается в серию вопросов.

Есть запрос вида

SELECT a FROM Table WHERE b IN (список).
Есть мысль, классу Table нарисовать функцию (метод или еще что там), которая будет возвращать некоторое значение, которое можно подставить на место списка, т.е. что-то вроде
SELECT a FROM Table WHERE b IN (Table_GetList(x)).
Причем, насколько я понимаю, GetList не должен возвращать просто строку, разделенную на элементы неким символом.
Возможно ли это в принципе? Если возможно, то как это сделать?
Правильно ли я понял, что запрос класса (в документации Class Queries) можно использовать таким образом?
Или это можно реализовать с помощью метода, возвращающего значение типа ResultSet? Похоже на запрос класса (он тоже ResultSet возвращает), но, насколько я понимаю, это уже немного другое явление.
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35204969
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

> Правильно ли я понял, что запрос класса (в документации Class Queries)
> можно использовать таким образом?
Да, можно.

> Или это можно реализовать с помощью метода, возвращающего значение типа
> ResultSet? Похоже на запрос класса (он тоже ResultSet возвращает), но,
> насколько я понимаю, это уже немного другое явление.
Нет, так не получится. К тому же %ResultSet всеравно можно сформировать только
по результату выполнения запроса.

Мы у себя делаем временную таблицу, например, admin.TempTable, с хранением в
CacheTemp($J) или Process Private Global (напр. ^||admin.TempTableD и т.д.)

В ней - два поля TempKey (на случай, если понадобится несколько таблиц. Можно не
заполнять) и TempValue, плюс индекс по TempKey

Потом перед запросом засовываем в нее значения обычным способом, предварительно
выполнив do ##class(admin.TempTable).%KillExtent()

При этом убиваются данные только текущего процесса, данные остальных процессов
остаются.

Соответственно, запрос будет вида

SELECT a FROM Table WHERE b IN (select TempValue from TempTable)

или

SELECT a FROM Table WHERE b IN (select TempValue from TempTable where
TempKey='MyClass.MyMethod')


Любви.
logist (Сергей Шутов)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35205273
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Hisbreht Victor :
Вы не указали Вашу версию Caché.

В последних версиях появился новый предикат %INLIST

Можно писать, например, так:
Код: plaintext
1.
2.
3.
4.
s IDs=$LISTBUILD("1","3","0","9")
&sql(DECLARE StateCursor CURSOR FOR SELECT ID,name INTO :id,:name FROM user.test
     WHERE id %INLIST :IDs)
...

Вам также могут пригодиться функции
$LISTFROMSTRING , $LISTTOSTRING

IDs можно получить еще так:
Код: plaintext
1.
2.
&sql(select LIST(id) into :IDs from user.test where ...)
set IDs=$LFS(IDs)
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35205274
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hisbreht VictorПричем, насколько я понимаю, GetList не должен возвращать просто строку, разделенную на элементы неким символом.
Если вернет строку типа
Код: plaintext
 1 , 2 , 3 
или
Код: plaintext
"Ваня","Петя", 10 , 12 
Т.е. синтаксически верную для SQL - будет то, что нужно.
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35207308
ГР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор> Или это можно реализовать с помощью метода, возвращающего значение типа
> ResultSet? Похоже на запрос класса (он тоже ResultSet возвращает), но,
> насколько я понимаю, это уже немного другое явление.
Нет, так не получится. К тому же %ResultSet всеравно можно сформировать только
по результату выполнения запроса.

Какая разница че методу возвращать, хоть %ResultSet.

Classmethod a(in) as %ResultSet
{
s rs=##class(%ResultSet).%New()
d rs.Prepare(..._in_...)
d rs.Execute()
q rs
}
...
Рейтинг: 0 / 0
Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
    #35208665
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Нет, так не получится. К тому же %ResultSet всеравно можно сформировать
> только
> по результату выполнения запроса.

> Какая разница че методу возвращать, хоть %ResultSet.

В исходном сообщении результаты работы метода собирались использовать в другом
запросе. Для методов, возвращающих Resultset, это невозможно.

Любви.
logist (Сергей Шутов)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Функция или процедура, возвращающая то, что можно подсунуть в SQL предикат IN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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