Oracle sql问题用动态创建的IN子句

时间:2015-09-22 15:56:41

标签: sql oracle

这会在括号中生成一个正确的字符串并引用。

select '('||REPLACE('''Binnenstad Boerhaavedistrict''',' ',''',''')||')' from dual

即:

  

('Binnenstad','Boerhaavedistrict')

但是当我在IN语句中使用它时,它会失败:

select dn.DISTRICTSNAAM 
from DISTRICTNAAM dn
where   dn.DISTRICTSNAAM in '('||REPLACE('''Binnenstad Boerhaavedistrict''',' ',''',''')||')'

没有错误,只是没有结果。

我的目的是从空格分隔的输入变量创建IN列表。 但是,当我用带引号的逗号分隔字符串为变量提供它时,它似乎才起作用。

这是为什么?还是太动态了?

2 个答案:

答案 0 :(得分:0)

问题是你的IN与完整字符串而不是数组

进行比较
where  dn.DISTRICTSNAAM in ( full string )

代替

where  dn.DISTRICTSNAAM in ( stringA, stringB)

答案 1 :(得分:0)

in不会解析包含逗号分隔值的字符串。它只处理以逗号分隔的字符串列表。

in ('a', 'b', 'c')没问题。

in ('''a''', ''b'', ''c''')只会测试一个值。

in '(''a''', ''b'', ''c'')'也只会测试一个值。

要执行您正在尝试的操作,您需要使用动态SQL。