我有一个简单的选择查询:
SELECT A
FROM B
WHERE A IN :conditions
其中A
是char
。
如果我按照以下方式进行完整查询:
SELECT A
FROM B
WHERE A IN ('A','E','I','O','U')
有效
但是如果我使用该参数,当我尝试使用ORACLE SQL Developer执行时,我将无法使其正常工作。
我已经尝试将参数提交为:
1* ('A','E','I','O','U')
2* 'A','E','I','O','U'
3* A,E,I,O,U
查询不返回结果
这样做的正确语法是什么?
谢谢大家
答案 0 :(得分:0)
您可以在SQL Developer(或SQL * Plus)中使用替换变量。定义时使用双引号。
测试数据
create table b as select 'A' as a from dual union all
select 'I' as a from dual union all
select 'U' as a from dual
执行
define params = "'A','E','I','O','U'"
select A from B where A in (¶ms);
结果
old:select A from B where A in (¶ms)
new:select A from B where A in ('A','E','I','O','U')
A
-
A
I
U
答案 1 :(得分:0)
Passing comma separated string as bind variable for VO query's IN operator
这个问题困扰了我多年,直到我发现此解决方案。
我使用这种技术在CLI上建立了对象搜索,然后在其中将模式列表传递给:BIND
SELECT owner,
object_name,
object_type
FROM all_objects
WHERE object_name LIKE :SEARCH
AND owner NOT IN (
'SYS',
'MDSYS',
'DBSNMP',
'SYSTEM',
'DVSYS',
'APEX_050100',
'PUBLIC',
'ORDS_METADATA',
'APEX_LISTENER'
)
AND object_type IN (
SELECT regexp_substr(:bind_ename_comma_sep_list,'[^,]+',1,level)
FROM dual CONNECT BY
regexp_substr(:bind_ename_comma_sep_list,'[^,]+',1,level) IS NOT NULL
)
ORDER BY owner,
object_name,
object_type;
答案 2 :(得分:0)
根据这篇文章,我找到了一种针对Oracle的方法: https://sqlstudies.com/2013/04/08/how-do-i-use-a-variable-in-an-in-clause/
会是这样的:
SELECT A
FROM B
WHERE ',' || :conditions || ',' LIKE '%,' || A || ',%'
可能不是最佳性能选项,但可以解决问题