oracle regexp_like с шаблоном из выбора

Я пытаюсь выбрать строки из таблицы с помощью регулярного выражения. Шаблон является результатом выбора.
У меня есть следующая ошибка компиляции при выборе, использующем regexp_like:

PLS-00428: в этом операторе SELECT ожидается предложение INTO.

declare 
  pattern varchar2;

begin

  select columns
  into pattern
  from table a
  where conditions;

  select * 
  from table2 
  where regexp_like(column, pattern);

end;

Я не понимаю, почему я должен использовать предложение into...


person plugandplay    schedule 05.07.2013    source источник
comment
SELECT в plsql должен иметь предложение INTO. Вы уже использовали его в своем 1-м утверждении.   -  person Noel    schedule 05.07.2013
comment
Ваш оператор выбирает * из таблицы2, где regexp_like (столбец, шаблон); также должен иметь предложение INTO, подобное первому. Зачем вообще нужно это заявление? Вы где-нибудь используете o/p этого второго оператора select?   -  person A Nice Guy    schedule 05.07.2013
comment
Я бы использовал второй выбор следующим образом: update my_table set col = value where col2 in (select * from table2 where regexp_like(column, pattern))   -  person plugandplay    schedule 05.07.2013
comment
Если вы собираетесь использовать простой оператор sql без предложения INTO, вы можете просто использовать execute ('оператор sql') или выполнить немедленно ('оператор sql');   -  person Mari    schedule 05.07.2013
comment
У вас есть только один столбец в таблице 2? 'где col2 в (выбрать col2..)' должно быть так   -  person Mari    schedule 05.07.2013
comment
Да, это «где col2 в (выбрать col2..)». Если я использую немедленное выполнение, я получаю «шаблон: неверный идентификатор».   -  person plugandplay    schedule 05.07.2013
comment
Я забыл оператор using с немедленным выполнением. Теперь это работает. Спасибо !   -  person plugandplay    schedule 05.07.2013
comment
Этот вопрос кажется не по теме, потому что речь идет об очевидной ошибке в коде ОП.   -  person APC    schedule 05.07.2013


Ответы (1)


Наконец, решение:

declare

  pattern varchar2;

begin

  select columns
  into pattern
  from table a
  where conditions;


  execute immediate '
      select col2 
      from table2 
      where regexp_like(column, :pattern)
  ' using pattern;

end;

Спасибо!

person plugandplay    schedule 08.07.2013