2016-07-13 3 views
-1

Мне нужно вызвать функцию с единственным параметром, который содержит список, ограниченный пробелом.Отправить несколько параметров списка функции PL/SQL

('1 2 3') 

Внутри функции я создал переменную, которая преобразует этот список

('1,2,3') 

Я обязан эту переменную var1(nvarchar(5000)) в пункте запроса внутри функции, но не передается. Было передано только одно значение 1, но не было передано несколько значений, таких как '1,2,3'.

Ex1:

var1 := '1' 
query syntax: col1 in (var1) -->> results are ok 

Ex2:

var1 := '1,2,3' 
query syntax: col1 in (var1) -->> doesn't output results 

Спасибо!

ответ

1

«1,2,3» - это строка, а не набор чисел - нет автоматического разбора текстовых строк, которые содержат запятые. Было бы катастрофой, если бы это было так.

Comma-separated input

0

Вы должны знать, что ТИС грязный путь и не рекомендуется.

Вы, вероятно, делать что-то вроде этого:

declare 
    i varchar2(200) default '1,2,3'; 
begin 
select col1 into i from table_name where col1 in (i); 
dbms_output.put_line(i); 
end; 
/

И вы должны получить сообщение об ошибке, как ORA-01403, ORA-01722

Если вы делаете это так:

declare 
    i varchar2(200) default '1'; 
begin 
    select col1 into i from table_name where col1 in (i); 
dbms_output.put_line(i); 
end; 
/

Там не является ошибкой , но вы должны передать список как строку, не такую ​​переменную, как это, используя динамический sql:

declare 
    i varchar2(200) default '1,2,3'; 
begin 
execute immediate 'select col1 from table_name where col1 in ('||i||')' into i; 
dbms_output.put_line(i); 
end; 
/
0

Должно работать.

query syntax: col1 in (select xmlcast(column_value as number) from xmltable('for $i in tokenize($str,",") return $i' passing var1 as "str"). 
Смежные вопросы