powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переменные в PL\SQL - как передать список в IN ?
10 сообщений из 10, страница 1 из 1
Переменные в PL\SQL - как передать список в IN ?
    #40082412
zxprsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,

Есть конструкция в SQL запросе:
... AND ADDITIONAL_GROUPS IN ('значение1', 'значение2') ...
Так работает.

Нужно значения передавать через переменную:
... AND ADDITIONAL_GROUPS IN (:var1) ...
Если в var1 передать значение1 или значение2 по отдельности - работает.

Но если передавать список, как указано в первом примере, то в результате возвращается пустая таблица.

Собственно вопрос, как правильно передать список в переменную, в каком формате? или это путь вообще не правильный?

Пробовал так:
1. 'значение1','значение2'
2. 'значение1, значение2'
3. '\'значение1\',\'значение2\''
4. ('значение1','значение2')
И как-то ещё, уже не помню, результата нет.

И как в ORACLE посмотреть выполненные sql запросы с учётом переданных переменных, чтобы увидеть как в итоге ложатся эти значения в результирующий SQL запрос?

Если выполнить:
select * from v$sql
То в списке вижу историю SQL запросов, но в них указаны переменные, без подстановки значений. В итоге не понятно какое подставилось значение.
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082423
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zxprsl,

Искал уже тут? Каждый второй с таким вопросом приходит
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082507
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zxprsl,

если передавать как строку, то

1) instr
2) строку преобразовать в список значений

.....
stax
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082550
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zxprsl,
Код: plsql
1.
2.
3.
4.
5.
--но это не точно
and ADDITIONAL_GROUPS IN  in (select trim(both '''' from x)
                                                    from (select REGEXP_SUBSTR (:var1,'[^,]+',1,LEVEL) x
                                                          from dual
                                                          connect by REGEXP_SUBSTR (:var1,'[^,]+',1,LEVEL) is not null))
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082747
zxprsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо,
Ничего из вышеизложенного не подошло.

В итоге сделал на уровне языка программирования Python:

SQL-запрос в отдельном файле:
...AND ADDITIONAL_GROUPS IN ({}) ...... AND ADDITIONAL_GROUPS_2 IN ({}) ....

Получаю из WEB-формы список, преобразовываю в строку, удаляю квадратные скобки по бокам и подставляю значение вместо {} по очереди, предаю на выполнение:

Код: python
1.
2.
3.
4.
5.
6.
grp1 = str(request.form.getlist('grp1')).strip("[]")
grp2 = str(request.form.getlist('grp2')).strip("[]")

sql_query = open(path_to_files+file_sql, 'r').read().format(grp1, grp2) 

cursor = cursor.execute(sql_query)
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082750
iehf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
and ADDITIONAL_GROUPS IN  in (select x.n
from
xmltable('ora:tokenize(.,",")'
    passing ',' || :v 
    columns n varchar2(20) path '.') x where x.n is not null);
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082767
Nickname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделай
Код: plsql
1.
:var1 = значение1,значение2 (без всяких кавычек, просто список через запятую)


и пропиши условие так
Код: plsql
1.
AND insrt(:var1||',',ADDITIONAL_GROUPS||',')!=0



PS
в значениях не должно быть "запятых", если запятые есть тогда поменяй запятую на неиспользуемый символ
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082849
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nickname

и пропиши условие так

условие неверное (с ошибкой)

.....
stax
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082873
Nickname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

ну пусть бы хоть немного головой подумал, а не просто copy-paste

Код: plsql
1.
  AND instr(var1||',',ADDITIONAL_GROUPS||',')!=0
...
Рейтинг: 0 / 0
Переменные в PL\SQL - как передать список в IN ?
    #40082929
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nickname,

Списки бывают не только сортированные
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переменные в PL\SQL - как передать список в IN ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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