Я кодирую триггер, чтобы гарантировать, что только один тип денег может быть установлен в качестве официального. Мое намерение - закодировать триггер "BEFORE INSERT OR UPDATE". Раздел INSERT работает нормально, но проблема заключается в кодировании раздела UPDATING, потому что, когда я пытаюсь обновить таблицу, я получаю ORA-04091 «таблица мутантов». Есть ли у вас какие-либо идеи?
Таблица (только одна запись может быть установлена как «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;