質問 |
||
| QNo.3450982 | トリガーの起動条件で悩んでいます。 | |
|---|---|---|
| 質問者:sevenkool |
超初心者です。 うまく説明できないかも知れませんが助けて下さい。 うまく動作しない処理は、 [A_TBL]が更新時に履歴あり・なしにそれぞれトリガーを用意しているのですが、 履歴なしの場合は[A_TBL]がUPDATEされるだけなので、 『[A_TBL]がUPDATEされたタイミングで[B_TBL]もUPDATEする』 という起動条件にしています。 履歴ありの場合は[A_TBL]のデータをUPDATEで無効化(FLGを立てます)し、 その後、更新データをINSERTで登録しようと思っています。 そのためトリガーの起動条件を、 『[A_TBL]がINSERTされたタイミングで[B_TBL]のデータをUPDATEする』 としていますが、 [A_TBL]に新規登録時のトリガーの起動条件が、 『[A_TBL]にINSERTされたタイミングで[B_TBL]にもINSERTする』 としているので、 [A_TBL]にINSERTされると両方のトリガーが起動してしまい、 怒られました。 自分の作ったトリガーを書いておくので どのようにしたらよいのか教えていただけませんでしょうか? トリガーの書き方におかしな点があったらご指摘もお願い致します。 よろしくお願いしますm(_ _)m 新規登録のトリガー CREATE OR REPLACE TRIGGER INS_01 AFTER INSERT ON A_TBL FOR EACH ROW BEGIN INSERT INTO B_TBL( ID, 姓, 名, 住所, 本籍, 電話番号, 郵便番号 )VALUES( :NEW.ID, :NEW.姓, :NEW.名, :NEW.住所, :NEW.本籍, :NEW.電話番号, :NEW.郵便番号 ); END; / 更新のトリガー CREATE OR REPLACE TRIGGER UP_01 AFTER INSERT ON A_TBL FOR EACH ROW BEGIN UPDATE B_TBL SET 姓 = :NEW.姓, 名 = :NEW.名, 住所 = :NEW.住所, 本籍 = :NEW.本籍, 電話番号 = :NEW.電話番号, 郵便番号 = :NEW.郵便番号 WHERE ID = :NEW.ID ; END; / |
|
困り度:
|
||
| 質問投稿日時: 07/10/22 11:33 |
||
回答良回答20pt |
|
| ANo.1 | やりたいことがイマイチ理解できないけれど、質問を読む限り、 A_TBLへINSERTする動機が2種類あって、いずれかを行う。 (1)A_TBLへのインサート、B_TBLのアップデート (2)A_TBLへのインサート、B_TBLへのインサート これが、A_TBLへのINSERTする動機にあたる部分が、A_TBLへの登録内容(値)で区別できるなら、 A_TBLのインサートトリガを2つ作るのでなく、1つに纏めて、B_TBLのINSERT/UPDATEを区分けすれば 良いでしょう。 A_TBLへINSERTする動機がA_TBLの内容で区別できないなら、A_TBLへINSERTする動機そのものに B_TBLへの更新を紐付ける方が自然だと思います。 |
|---|---|
| 回答者:k_o_r_o_c_h_a_n | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 07/10/22 19:39 |
|
| |
| この回答へのお礼 | なるほど。。。 やってみます。 ありがとうございました! |