2

列にサブストリングが含まれているが、その列のタイプが「Long」であるテーブルから行を削除するにはどうすればよいですか。(はい、Longを使用するべきではないことはわかっていますが、他の誰かの混乱を維持しています)。

私の最初の試みは:

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

この回答に続く。)

これは次を返します:

SQLエラー:ORA-04091:テーブルblah.longtableが変化しています、トリガー/関数はそれを認識しない可能性があります

4

1 に答える 1

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;
于 2010-03-04T18:08:36.613 に答える