写过存储关键 in()的用法问题
PROCEDURE 中有个入参FLAG ,数值为:
FLAG:=“1,2,3”;
PROCEDURE 有一个sql语句 如:
select * from dual where x.dd in(FLAG);
如果 FLAG:=1; 且 x.dd有1,2,3的值。数值出来1的值。
如果 FLAG:=1,2,3;出不来值。
sql没有使用拼接 然后exec执行。就是直接写的sql,想问问 能否把入参FLAG:=“1,2,3”; 转换成
select * from dual where x.dd in(1,2,3);的语句执行。
不知道说明白没有。
不准备使用SQL拼接。
------解决方案--------------------
不拼不行。
in (1,2,3) 代表 in (?,?,?)
in ('字符值的1,2,3') 代表 in (?) 传入的值是 '1,2,3' 参数个数都变了
非不能拼接就改SQL结构,变成in(select ...)
SQL code
select regexp_substr('1,2,3','[^,]+',1,level) a from dual connect by level<=3