Oracle Sql Statement для игнорирования строковых литералов - PullRequest
1 голос
/ 30 ноября 2011

У меня есть простой запрос, в котором есть предложение IN, т.е.

select *
  from customer 
 where dept_name in ('red', 'blue')

Теперь я пытаюсь поместить dept_name в строковую переменную следующим образом:

dept_name_list := 'red';

select *
  from customer
 where dept_name in (dept_name_list);

- это работает.

Но проблема в том, как я могу заставить Oracle игнорировать "'", когда мне нужно построить строку следующим образом:

dept_name_list := ''red', 'blue'';

select *
  from customer
 where dept_name in (dept_name_list);

здесь, dept_name_list возвращает ошибку?

Есть предложения ??

Обновление: я пытался избежать одиночной кавычки, делая что-то вроде этого: dept_name_list := '''red'', ''blue''';

Компилируется, но результат не отображается.

Ответы [ 3 ]

3 голосов
/ 01 декабря 2011
DECLARE
  TYPE tbl_str IS TABLE OF VARCHAR2 (30) index by binary_integer;
  l_array tbl_str;

BEGIN
   l_array(0) := 'Red';
   l_array(1) := 'Green';
   l_array(2) := 'Blue';

  select *
  from customer
  where dept_name in TABLE(CAST(l_array AS tbl_str ));
END;

Должен это сделать

3 голосов
/ 30 ноября 2011

Вы можете создать тип, представляющий таблицу varchars, и использовать его в своем выборе.

Вот ссылка , которая объясняет и показывает, как использовать типы таким образом.

1 голос
/ 01 декабря 2011

Вы можете избежать кавычек, как это:

dept_name_list := ' ''red'', ''blue'' ';

Но это не поможет вам, если вы не будете динамически создавать свой SQL следующим образом:

v_sql := 'select * '
 ||        'from customer '
 ||       'where dept_name in (' || dept_name_list || ')';

Затем вы можете открыть курсор следующим образом:

OPEN out_cur FOR v_sql;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...