Oracle Objects for OLE (OO4O) как указать несколько значений параметров в запросе с IN() #811162


#0 by Gluk
В PL/SQL Developer простой запрос отрабатывает правильно: SELECT * FROM mytable WHERE item IN('111','222') Использую подключение через "OracleInProcServer.XOraSession": SELECT * FROM mytable WHERE item IN(:Items) Если задать параметр: Parameters.Add("Items", "111", 1) Отрабатывает верно. Задаю параметр: Parameters.Add("Items", "'111','222'", 1) или Parameters.Add("Items", "111,222", 1) Запрос ничего не возвращает. Как правильно задать параметр?
#1 by rphosts
может вторым параметром массив втыкать?
#2 by Asakra
SELECT * FROM mytable WHERE item IN(:Items1,:Items2)
#3 by Gluk
подскажи как плз, не очень понимаю
#4 by Gluk
а если количество значения заранее не известно или их много?
#5 by Asakra
в цикле
#6 by Gluk
вариант, но не очень хороший
#7 by NorthWind
, чет мне кажется, что не получится в IN массив вставить. Я бы рассмотрел временную или постоянную таблицу, которую предварительно заполнить этими данными и потом сделать селект с условием на содержание элементов в этой таблице.
#8 by Gluk
попробую
#9 by Gluk
еще советуют преобразовать строку параметра в таблицу как это можно сделать?
#10 by Asakra
в цикле) insert
#11 by Asakra
может тогда like?
#12 by Gluk
не, я думаю имеется ввиду это: WITH xx AS (     SELECT '1,2,10,15,27,58,135' ss FROM dual) ,  yy AS (     SELECT regexp_count(ss,',')+1 nn FROM xx) ,  zz AS (     SELECT LEVEL mm FROM dual, yy     CONNECT BY LEVEL <= yy.nn) FROM xx, zz ORDER BY 1; но не понимаю как это работает
#13 by Gluk
like как тут использовать?
#14 by Asakra
может так: SELECT * FROM mytable WHERE item IN("+СтрокаПараметров+") как-то так: SELECT * FROM mytable WHERE ("+СтрокаПараметров+") like '%'+item+'%'
#15 by Asakra
SELECT * FROM mytable WHERE '"+СтрокаПараметров+"' like '%'+item+'%'
#16 by Asakra
СтрокаПараметров = "'111','222'";
#17 by Asakra
а для like просто "111,222"
#18 by Asakra
я бы так делал IN("+СтрокаПараметров+")
#19 by NorthWind
Можно, но есть нюанс. Я сталкивался с тем, что у некоторых СУБД есть ограничения на количество значений в списке IN . В частности, встречалась цифра 255 или 256. Поэтому если там может быть реально много данных, то верный вариант - таблица для хранения этих значений и выборка с ней.
#20 by Asakra
а почему не проверить, как с этим дела у oracle?
#21 by Asakra
задача же "указать несколько значений параметров в запросе с IN" )) сколь там этих значений автор не уточняет...
#22 by NorthWind
мое дело предупредить, а там автору виднее, пусть уточняет
#23 by Gluk
сработало, спасибо
#24 by Gluk
"максимальное число выражений в списке - 1000"
#25 by Вафель
передавать параметры через строку несекурно
#26 by Gluk
просвети плз
#27 by Вафель
Картинку посмотри )))
#28 by Gluk
я про экранирование и спросил
#29 by DES
что такое "экранировать" ?
#30 by Gluk
сказать интерпретатору, что специальные символы не использовать как специальные
#31 by dk
если не нравится большое количество элементов в IN то можно эти элементы запихнуть во временную таблицу и перестроить IN (SELECT VAL from #mytemp) Хотя есть мнение что inner join быстрее чем in отработает
#32 by Gluk
прав нет на это
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям