定义一个采用多个值的变量

问题描述 投票:0回答:1

我想定义某种带有值列表的局部变量,以便我可以在查询中引用该列表。我有一个字段“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。任何帮助,将不胜感激。

oracle oracle-sqldeveloper
1个回答
1
投票

我可以看到一些问题。

  • 在定义变量时,你缺少一个等号;
  • 你的替换变量引用不应该是单引号;
  • 你正在重复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
© www.soinside.com 2019 - 2024. All rights reserved.