2016-07-13 40 views
-1

我需要使用包含由空格分隔的列表的单个参数来调用函数。将多个列表参数发送到PL/SQL函数

('1 2 3') 

我创建了这个转换列表中变量的函数内部来

('1,2,3') 

我在内部功能的语句查询绑定这个变量var1(nvarchar(5000))来,但不通过。只传递了一个值1,但没有通过多个值,如'1,2,3'

练习1:

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

练习2:

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").