Я вижу несколько вопросов вне игры.
- при определении переменной вы пропускаете знак равенства;
- ссылка на переменную подстановки не должна быть в одинарных кавычках;
- вы повторяете ключевое слово
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