ORACLE-SQL:定义和使用多字符串变量

ORACLE-SQL:定义和使用多字符串变量,sql,oracle,variables,Sql,Oracle,Variables,我目前正在使用一个数据库,其中一些数字以文本格式存储(仅供参考:外部数据库,不可能更改) 我的代码随着时间的推移而增长,因此我开始在代码顶部使用变量,以避免在运行新分析时多次调整代码 例如: define var = '1234' select * from products where art_id = '&&var' ; 这段代码为我提供了所有ID为1234的文章-请记住,ID存储为文本(因此为“'”s) 现在,当我想查询多个产品时,我必须做什么 这不起作用: def

我目前正在使用一个数据库,其中一些数字以文本格式存储(仅供参考:外部数据库,不可能更改)

我的代码随着时间的推移而增长,因此我开始在代码顶部使用变量,以避免在运行新分析时多次调整代码

例如:

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')
;
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')
;
define var = ''1234','2345''

select * from products
where
  art_id in (&&var)
;
=>错误:缺少表达式

我显然想创建一个where子句的构造如下:

art_id in ('1234','2345')

谢谢

您需要转义引号:

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