我目前正在使用一个数据库,其中一些数字以文本格式存储(fyi:外部数据库,无法更改)。
我的代码随着时间的推移而增长,所以我开始在代码顶部使用变量,以避免在运行新分析时多次调整代码
示例:
define var = '1234'
select * from products
where
art_id = '&&var'
;
这给代码提供了ID为1234的所有文章 - 请记住,ID存储为文本(因此“s”)
现在,当我想查询多个产品时,我该怎么做?
这不起作用:
define var = '1234','2345'
select * from products
where
art_id in ('&&var')
;
==>我想念ID为2345的产品
此外,这不起作用:
define var = ''1234','2345''
select * from products
where
art_id in (&&var)
;
==>错误:缺少表达式
我显然想要创建的是where子句的构造方式如下:
art_id in ('1234','2345')
谢谢!
答案 0 :(得分:3)
您需要转义引号:
define var = '''1234'',''2345'''
例如:
SQL> define var = '''a'', ''b'''
SQL> select 1 from dual where 'a' in ( &&var);
old 1: select 1 from dual where 'a' in ( &&var)
new 1: select 1 from dual where 'a' in ( 'a', 'b')
1
----------
1
请注意,我在这里使用引号来处理字符串值;如果你有数字值,你可以避免引用:
SQL> define var = '123, 234'
SQL> select 1 from dual where 1 in (&&var);
old 1: select 1 from dual where 1 in (&&var)
new 1: select 1 from dual where 1 in (123, 234)
no rows selected
SQL> select 1 from dual where 123 in (&&var);
old 1: select 1 from dual where 123 in (&&var)
new 1: select 1 from dual where 123 in (123, 234)
1
----------
1
答案 1 :(得分:0)
正确答案如下:
DEFINE var = "'1234','2345'";
SELECT * FROM products
WHERE art_id IN (&var)
;
--> 2 行被选中。