2010-03-04 3 views
2

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

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

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

(Вслед за this answer.)

Это возвращает:

SQL Error: ORA-04091: table blah.longtable is mutating, trigger/function may not see it

ответ

4

Я просто реплицировать вашу проблему и получил ту же ошибку - кажется, что функция не может работать из инструкции 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; 
Смежные вопросы