我在BEFORE INSERT TRIGGER上看到一个奇怪的错误,我不明白。即使阅读了这里发布的类似问题的多个问题。java.sql.BatchUpdateException:在插入触发器之前的ORA-04091
failed to process "method": category_id = 'foo' and request_id = '99' error: java.sql.BatchUpdateException: ORA-04091: table SCHEMA.ANIMAL_TABLE is mutating, trigger/function may not see it ORA-06512: at "SCHEMA.TRIGGER_NAME", line 7 ORA-04088: error during execution of trigger 'SCHEMA.TRIGGER_NAME'
这里是触发:
CREATE OR REPLACE TRIGGER TRIGGER_NAME
BEFORE INSERT ON animal_table FOR EACH ROW WHEN (NEW.animal_type = 'cats')
DECLARE base_animal_id NUMBER(19,0); base_amount NUMBER(19,0);
BEGIN
SELECT animal_nbr INTO base_animal_id
FROM animal_table
WHERE category_id = :NEW.category_id AND summary_id = :NEW.summary_id
AND animal_type = 'special';
SELECT animal_amount INTO base_amount
FROM animal_table
WHERE category_id = :NEW.category_id AND summary_id = :NEW.summary_id
AND animal_type = 'special';
IF :NEW.category_id = 'foo' THEN
:NEW.animal_info1 := base_animal_id;
:NEW.animal_info2 := base_amount;
:NEW.animal_info3 := '00';
END IF;
END;
我知道关于它的触发被关押在同一个表的修改规则,但我也是红色的东西,就应该更换新的列时工作,仅适用于:NEW字段。我也认为它可能缺少UPDATE作为触发事件,但情况并非如此。任何人都可以帮助我吗?因为我是触发器和PL/SQL的新手。
谢谢,L ukas ...我正准备这样做。 –