日期:2014-05-17  浏览次数:20925 次

写过存储关键 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