2012-01-12 10 views
0

私は、テーブルの列をIDで連結して新しいテーブルに挿入するトリガーを持っています。表Aの更新、挿入、削除が実行されると、idでグループ化してcolumn1を連結して表Bに挿入します。トリガーをグループごとに新しいテーブルに連結する

問題が発生すると、例外表がスローされます。これは、トリガーがクエリを実行するためです。

トリガーを使用してこれを修正するにはどうすればよいですか? (ストアドプロシージャを使用できず、スケジュールされたタスクの使用を避けたい)。

+0

マテリアライズドビューを使用できますか? – Craig

+0

'tablea'でDML操作を実行すると、' tablea'にも挿入されます。 – Ben

+0

'insert into tableb'を意味しますか? – APC

答えて

1

「トリガーを使用してこれを修正するにはどうすればよいですか(ストアドプロシージャは使用できず、 はスケジュールされたタスクを使用しないでください)。

トリガーを使用してこれを行う方法はありません。

行レベルのトリガーを使用することはできません。これは、検出すると、選択によって変異テーブル例外がスローされるためです。

テーブルレベルのトリガーは使用できません.NEWまたは:OLDの値は参照できません。

行レベルのトリガーに名前空間変数を設定して、テーブル・レベル・トリガーにNEWまたはOLD値を渡すことはできますが、コンテキストには作成できないストアード・プロシージャーが必要です。

テーブルはどうですか?影響を受けるIDを渡すためのテーブルを作成することは許可されますか?

しかし、厄介な機能を実装するだけでオーバーヘッドが大きくなります。 ORA-04091の例外は、ほとんどの場合、データ・モデルの欠陥を示しており、確かにそのように思われます。

+0

唯一の方法は、新しいテーブルを作成し、影響を受けるIDを行レベルのトリガーに挿入させることです。次に、IDレベルを処理するテーブルレベルのトリガを設定しますか? – firebird

関連する問題