0
私はトリガーをコーディングして、1種類のお金しか公式に設定できないようにしています。私の意図は、コード "前の挿入または更新"のトリガーです。 INSERTセクションは正常に動作しますが、問題はUPDATINGセクションをコーディングしているためです。テーブルを更新しようとすると、ORA-04091 "mutanting table"が返されるためです。あなたは何か考えていますか?Oracle Database 10gで「IF UPDATING」トリガーをコーディングすることはできますか?
表(1レコードのみが 'Y' として設定することができます):
mon_id mon_description mon_official
----------------------------------------------
E EUR N
D DOL N
P PES Y
トリガー:
CREATE OR REPLACE TRIGGER mon_oficial_ins_trg
BEFORE
INSERT OR UPDATE
ON monedas
FOR EACH ROW
DECLARE
v_count NUMBER(8);
BEGIN
IF INSERTING THEN
SELECT COUNT(mon_oficial)
INTO v_count
FROM monedas
WHERE mon_oficial = 'Y';
IF v_count = 1 THEN
RAISE_APPLICATION_ERROR(
-20010, 'Only one record can be set as 'Y'');
END IF;
END IF;
IF UPDATING THEN
SELECT COUNT(:OLD.mon_oficial)
INTO v_count
FROM monedas
WHERE :OLD.mon_oficial = 'Y';
IF v_count = 1 AND :NEW.mon_oficial = 'Y' THEN
RAISE_APPLICATION_ERROR(
-20010, 'Only one record can be set as 'Y'');
END IF;
END IF;
END mon_oficial_ins_trg;
/
SHOW ERRORS;