动态IN子句

碰到过这样的需求,要求将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);

猜你喜欢

转载自angelosun.iteye.com/blog/2084355