SQL语句中的动态IN子句

时间:2018-07-02 10:48:54

标签: sql oracle plsql

我有一条如下所示的SQL语句。在这种情况下,我希望拥有像'X','Y','Z'这样的IN子句值,并且该值可能会根据不同的条件而有所不同。但是,当我在运行时提供此值时,SQL语句未提供任何输出。

SELECT test,test1,test2
FROM test_n 
WHERE NVL(code,'X') in(:code);

这里

:code = 'X','Y','Z'

有人可以帮助我吗?

我也无法使用匿名块或函数来实现这一目标。

2 个答案:

答案 0 :(得分:0)

您可以通过引用字符串( substitution 变量)来使用DEFINE

SET DEFINE ':'
DEFINE code  = "'X','Y','Z'"

SELECT test,test1,test2
FROM test_n 
WHERE NVL(code,'X') in(:code);

如果您想使用真实的 bind 变量,则可以使用LIKE语句尝试类似的操作。

set define off
VARIABLE code VARCHAR2
EXEC :code := 'X,Y,Z'
select test,test1,test2
from   test_n
where  ',' || :code || ',' like '%,' || code || ',%'
;

答案 1 :(得分:0)

您可以使用类似:

AutoGenerateColumns="False"