碰到过这样的需求,要求将IN子句里的值参数化。比如
SELECT * FROM TABLE1 WHERE parm1 IN ('v1','v2','v3');
参数化v1, v2, v2 通过动态sql可以实现,也可以通过普通sql语句将V1, V2, V3转化成结果集。
SELECT regexp_substr(x, '[^,]+', 1, level) x
FROM (
SELECT 'v1,v2,v3' X FROM DUAL
)
connect by level <= length(x) - length(replace(x,',')) + 1;
X
--------
v1
v2
v3
得到V1, V2, V3的结果集,这样就可以构建IN字句:
SELECT * FROM TABLE1 WHERE parm1 IN
(SELECT regexp_substr(x, '[^,]+', 1, level) x
FROM (
SELECT 'v1,v2,v3' X FROM DUAL
)
connect by level <= length(x) - length(replace(x,',')) + 1);