![]() |
|
Oracle Objects for OLE (OO4O) как указать несколько значений параметров в запросе с IN() | ☑ | ||
---|---|---|---|---|
0
Gluk
29.12.17
✎
08:33
|
В 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
rphosts
29.12.17
✎
08:40
|
может вторым параметром массив втыкать?
|
|||
2
Asakra
29.12.17
✎
08:47
|
Parameters.Add("Items1", "111", 1)
Parameters.Add("Items2", "222", 1) SELECT * FROM mytable WHERE item IN(:Items1,:Items2) |
|||
3
Gluk
29.12.17
✎
08:48
|
(1) подскажи как плз, не очень понимаю
|
|||
4
Gluk
29.12.17
✎
08:52
|
(2) а если количество значения заранее не известно или их много?
|
|||
5
Asakra
29.12.17
✎
08:53
|
(4) в цикле
|
|||
6
Gluk
29.12.17
✎
09:07
|
(5) вариант, но не очень хороший
|
|||
7
NorthWind
29.12.17
✎
09:13
|
(0), (2) чет мне кажется, что не получится в IN массив вставить. Я бы рассмотрел временную или постоянную таблицу, которую предварительно заполнить этими данными и потом сделать селект с условием на содержание элементов в этой таблице.
|
|||
8
Gluk
29.12.17
✎
09:20
|
(7) попробую
|
|||
9
Gluk
29.12.17
✎
09:22
|
еще советуют преобразовать строку параметра в таблицу
как это можно сделать? |
|||
10
Asakra
29.12.17
✎
09:24
|
(9) в цикле) insert
|
|||
11
Asakra
29.12.17
✎
09:25
|
может тогда like?
|
|||
12
Gluk
29.12.17
✎
09:30
|
(9) не, я думаю имеется ввиду это:
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) SELECT zz.mm, to_number(regexp_substr(xx.ss,'[^,]+',1,zz.mm)) RESULT FROM xx, zz ORDER BY 1; но не понимаю как это работает |
|||
13
Gluk
29.12.17
✎
09:31
|
(11) like как тут использовать?
|
|||
14
Asakra
29.12.17
✎
09:34
|
(12) может так: SELECT * FROM mytable WHERE item IN("+СтрокаПараметров+")
(13) как-то так: SELECT * FROM mytable WHERE ("+СтрокаПараметров+") like '%'+item+'%' |
|||
15
Asakra
29.12.17
✎
09:35
|
SELECT * FROM mytable WHERE '"+СтрокаПараметров+"' like '%'+item+'%'
|
|||
16
Asakra
29.12.17
✎
09:37
|
СтрокаПараметров = "'111','222'";
|
|||
17
Asakra
29.12.17
✎
09:37
|
а для like просто "111,222"
|
|||
18
Asakra
29.12.17
✎
09:39
|
я бы так делал IN("+СтрокаПараметров+")
|
|||
19
NorthWind
29.12.17
✎
10:16
|
(18) Можно, но есть нюанс. Я сталкивался с тем, что у некоторых СУБД есть ограничения на количество значений в списке IN (). В частности, встречалась цифра 255 или 256. Поэтому если там может быть реально много данных, то верный вариант - таблица для хранения этих значений и выборка с ней.
|
|||
20
Asakra
29.12.17
✎
10:23
|
(19) а почему не проверить, как с этим дела у oracle?
|
|||
21
Asakra
29.12.17
✎
10:26
|
(19) задача же "указать несколько значений параметров в запросе с IN" ))
сколь там этих значений автор не уточняет... |
|||
22
NorthWind
29.12.17
✎
10:31
|
мое дело предупредить, а там автору виднее, пусть уточняет
|
|||
23
Gluk
29.12.17
✎
14:01
|
(18) сработало, спасибо
|
|||
24
Gluk
29.12.17
✎
14:02
|
(19) "максимальное число выражений в списке - 1000"
|
|||
25
Вафель
29.12.17
✎
14:22
|
(23) передавать параметры через строку несекурно
https://xkcd.ru/i/327_v1.png |
|||
26
Gluk
29.12.17
✎
14:24
|
(25) просвети плз
|
|||
27
Вафель
29.12.17
✎
14:26
|
(26) Картинку посмотри )))
|
|||
28
Gluk
29.12.17
✎
14:26
|
(27) я про экранирование и спросил
|
|||
29
DES
29.12.17
✎
14:55
|
(28) что такое "экранировать" ?
|
|||
30
Gluk
29.12.17
✎
14:59
|
(29) сказать интерпретатору, что специальные символы не использовать как специальные
|
|||
31
dk
29.12.17
✎
15:03
|
(9) если не нравится большое количество элементов в IN
то можно эти элементы запихнуть во временную таблицу и перестроить IN (SELECT VAL from #mytemp) Хотя есть мнение что inner join быстрее чем in отработает |
|||
32
Gluk
29.12.17
✎
15:22
|
(31) прав нет на это
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |