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

时间:2017-01-26 15:27:15

标签: sql oracle variables

我目前正在使用一个数据库,其中一些数字以文本格式存储(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')

谢谢!

2 个答案:

答案 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 行被选中。