Удалить строки, соответствующие подстроке как LIKE? - PullRequest
2 голосов
/ 04 марта 2010

Как удалить строки из таблицы, где столбец содержит подстроку, но тип этого столбца - «Длинный». (Да, я знаю, что не должен использовать Long, но я поддерживаю чужой беспорядок).

Моя первая попытка была:

delete from longtable 
  where search_long(rowid) like '%hello%';  

(Исходя из этот ответ .)

Возвращает:

Ошибка SQL: ORA-04091: таблица blah.longtable мутирует, триггер / функция может ее не видеть

1 Ответ

4 голосов
/ 04 марта 2010

Я только что повторил вашу проблему и получил ту же ошибку - кажется, что функция не может работать из инструкции DELETE. Полный текст ошибки:

ORA-04091: table HOU.LONGTABLE is mutating, trigger/function may not see it
ORA-06512: at "TONY.SEARCH_LONG", line 4

Этот процедурный подход будет работать:

begin
  for r in (select id from longtable 
            where search_long(rowid) like '%hello%')
  loop
    delete longtable where id = r.id;
  end loop;
end;
...