【发布时间】:2011-11-18 19:32:51
【问题描述】:
我在 BEFORE INSERT TRIGGER 上遇到了一个奇怪的错误,我无法理解。即使在阅读了此处发布的多个具有类似问题的问题之后。
未能处理“方法”:category_id = 'foo' 和 request_id = '99' 错误:java.sql.BatchUpdateException:ORA-04091:表 SCHEMA.ANIMAL_TABLE 正在变异,触发器/函数可能看不到它 ORA-06512:在 “SCHEMA.TRIGGER_NAME”,第 7 行 ORA-04088:执行期间出错 触发“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 的新手。
【问题讨论】:
-
谢谢你,Lukas...我正要这样做。