Заключите значение DEFINE
в двойные кавычки:
define letters = "'a','b','c','d'"
set verify on
select * from dual where dummy in (&letters);
old 1: select * from dual where dummy in (&letters)
new 1: select * from dual where dummy in ('a','b','c','d')
no rows selected
Обратите внимание, что задача состоит в том, как DEFINE
строка из нескольких слов, поскольку это та же проблема:
SQL> define letters = I love kittens
SQL> define letters
DEFINE LETTERS = "I" (CHAR)
SQL> define letters = 'a','b','c','d'
SQL> define letters
DEFINE LETTERS = "a" (CHAR)
Двойные кавычки исправляют это:
SQL> define letters = "I love kittens"
SQL> define letters
DEFINE LETTERS = "I love kittens" (CHAR)
Просто для полноты, другой способ установить переменную define
- из оператора select
с использованием подхода column new_value
.Исторически это было предусмотрено для динамической установки заголовков страниц в отчетах SQL * Plus, но это удобно в сценариях.(Это также единственный способ установить тип на number
, но это не имеет значения.)
SQL> col letters new_value letters
SQL> select q'{'a','b','c','d'}' as letters from dual;
LETTERS
---------------
'a','b','c','d'
1 row selected.
SQL> def letters
DEFINE LETTERS = "'a','b','c','d'" (CHAR)
SQL> select 123.456 as letters from dual;
LETTERS
----------
123.456
1 row selected.
SQL> def letters
DEFINE LETTERS = 123.456 (NUMBER)