私には2つのテーブルがXX
ありYY
、更新の場合にそれらのトリガーが互いに呼び出しています。
XX のトリガーは次のようになります。
CREATE OR REPLACE TRIGGER SCMA.XX_RBIU
BEFORE INSERT OR UPDATE
ON SCMA.XX FOR EACH ROW
-- PL/SQL BLOCK
BEGIN
IF UPDATING THEN
-- Only update the YY row if the branch id has
-- been modified on the XX row
IF :NEW.BRANCH_ID <> :OLD.BRANCH_ID THEN
UPDATE YY TP
SET TP.BRANCH_ID = :NEW.BRANCH_ID
WHERE TP.XX_ID = :NEW.XX_ID;
END IF;
END IF;
...
... -- Other PL/SQL statements that do some necessary
... -- computation and do not use any SQL.
...
END;
/
YY のトリガーは次のようになります。
CREATE OR REPLACE TRIGGER SCMA.YY_RBIU
BEFORE INSERT OR UPDATE
ON SCMA.YY
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
v_xx_type xx.xx_type_code%TYPE;
BEGIN
select x.xx_type_code
into v_xx_type
from XX x
where x.xx_id = :new.xx_id;
...
... -- Other PL/SQL statements that do some necessary
... -- computation and do not use any SQL.
...
END;
/
SELECT
トリガーのステートメントでYY_RBIU
このエラーが発生していることはわかっています。それを回避するためにトリガーをコーディングするにはどうすればよいですか?
SELECT
ステートメントをブロックYY_RBIU
内にラップしようとしましIF INSERTING THEN
たが、これは更新に対して実行されません。SELECT
update が trigger から呼び出されている場合、このステートメントをスキップするにはどうすればよいXX_RBIU
ですか?
私も入れてみPRAGMA AUTONOMOUS_TRANSACTION
ましXX_RBIU
たが、デッドロックになっています。
this、this、this、thisも参照してみましたが、解決できませんでした。
どんな助けでも大歓迎です。