2017-01-26 2 views
1

В настоящее время я использую базу данных, где некоторые номера хранятся в текстовом формате (fyi: внешняя база данных, которую невозможно изменить).ORACLE-SQL: определение и использование многострочной переменной

Мои коды выросли в течение долгого времени, поэтому я начал использовать переменные в верхней части моего кода, чтобы избежать корректировки кода несколько раз при запуске нового анализа

Пример:

define var = '1234' 

select * from products 
where 
    art_id = '&&var' 
; 

Это дает код дает мне все статьи с ID 1234 - имейте в виду, что идентификатор хранится в виде текста (отсюда «'» 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') 

Спасибо!

ответ

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 
+0

Работает как очарование, спасибо! – Berbatov

Смежные вопросы