2 つのデータベース db1 (Table1) と db2 (Table2) があります。db1 テーブル Tabl1 挿入でトリガーを作成しました。そのデータを db2 の Table2 に追加したいと考えています。MySQLでも可能であることがわかりましたが、DB2でも同じことをしたいと思っています。これを db2 で実現できますか。任意の応答をいただければ幸いです。
2 に答える
トリガー本体内のニックネームで挿入/更新/削除ステートメントを呼び出す場合
トリガーでニックネームを更新対象にすることはできません。
トリガー本体のニックネームに SELECT ステートメントを含めることができます。
トリガー本体のニックネームに INSERT、UPDATE、または DELETE ステートメントを含めることはできません。
ストアドプロシージャ内で挿入/更新/削除ステートメントを呼び出し、そのストアプロシージャをトリガー本体から呼び出す場合。
SQLSTATE = 55047 のエラー SQL20136N が発生します。これは、次のようにネストされたパス内のニックネームにアクセスしようとすると発生します。
- ローカル データベース サーバー上のテーブル TAB1
- ニックネーム NICK1 は、リモート連合サーバー上のいくつかのテーブルを参照しています
- NICK1 にアクセスするローカル ストアド プロシージャ STP1
- ストアド プロシージャ STP1 を呼び出す TAB1 にトリガーを挿入した後
TAB1 のトリガーが起動された後、DB2 はストアード・プロシージャー STP1 の実行を開始します。このストアード・プロシージャーがニックネーム NICK1 にアクセスしようとすると、すぐにエラー SQL20136N が発生します。
IBM DB2 LUW では、トリガー本体内のフェデレーテッド オブジェクトへの読み取りアクセスしかありません。
特定の状況で読み取り/書き込みの競合が発生する可能性があるため、挿入、更新、および削除の要求は引き続き失敗します。
使用されるフェデレーションによってそれをシミュレートできます。データベースに対してローカルであったため、リモート テーブルをフェレレートします。