将多个列表参数发送到PL / SQL函数

时间:2016-07-13 11:13:35

标签: oracle plsql

我需要调用一个带有单个参数的函数,该函数包含一个由空格分隔的列表。

('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

谢谢!

3 个答案:

答案 0 :(得分:1)

' 1,2,3'是一个字符串,而不是一组数字 - 没有自动解析恰好包含逗号的文本字符串。如果它这样做将是非常灾难性的。

Comma-separated input

答案 1 :(得分: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;
/

答案 2 :(得分:0)

它应该工作。

query syntax: col1 in (select  xmlcast( column_value as number)  from xmltable('for $i in tokenize($str,",") return $i' passing  var1 as "str").