我想定义某种带有值列表的局部变量,以便我可以在查询中引用该列表。我有一个字段“my_field”,我想编写一个查询,当“my_field”取值为'term1','term2'或'term3'时返回1,当它接受任何其他值时返回0值。
这是我尝试过的:
DEFINE my_variable IN ('term1', 'term2', 'term3');
SELECT
CASE WHEN my_field IN '&my_variable' THEN 1 ELSE 0 END AS 'new_field'
FROM my_table
这不起作用,我得到语法错误。我正在使用Oracle的SQLDeveloper。任何帮助,将不胜感激。
我可以看到一些问题。
IN
关键字;DEFINE my_variable = IN ('term1', 'term2', 'term3')
SELECT
CASE WHEN my_field &my_variable THEN 1 ELSE 0 END AS new_field
FROM my_table
使用set verify on
运行它会显示它生成的最终有效查询:
old:SELECT
CASE WHEN my_field &my_variable THEN 1 ELSE 0 END AS new_field
FROM my_table
new:SELECT
CASE WHEN my_field IN ('term1', 'term2', 'term3') THEN 1 ELSE 0 END AS new_field
FROM my_table
NEW_FIELD
----------
1
我在变量中添加了很多术语,并且我添加换行符以帮助保持代码清洁。但是,当我这样做时,它会导致查询错误。
如果你想将define
分成多行,你可以使用-
延续字符,但在SQL Developer中你需要实际使它成为一个注释才能正常工作:
DEFINE my_variable = IN ( --
'term1', --
'term2', --
'term3')
SELECT
CASE WHEN my_field &my_variable THEN 1 ELSE 0 END AS new_field
FROM my_table
/
set verify on
显示为:
old:SELECT
CASE WHEN my_field &my_variable THEN 1 ELSE 0 END AS new_field
FROM my_table
new:SELECT
CASE WHEN my_field IN ( --
'term1', --
'term2', --
'term3') THEN 1 ELSE 0 END AS new_field
FROM my_table
NEW_FIELD
----------
1