我需要调用一个带有单个参数的函数,该函数包含一个由空格分隔的列表。
('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
谢谢!
答案 0 :(得分:1)
' 1,2,3'是一个字符串,而不是一组数字 - 没有自动解析恰好包含逗号的文本字符串。如果它这样做将是非常灾难性的。
答案 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").