日期:2014-05-17  浏览次数:21049 次

oracle触发器修该某条记录某个字段值时候自动修改该记录指向的另一条记录的同一个字段值
表结构如下:

CREATE TABLE "NAME"."NewTable" (
"REGION_ID" VARCHAR2(100 BYTE) NULL ,
"X" NUMBER(10) NULL ,
"FID" VARCHAR2(100 BYTE) NULL 
)

我现在的需求是:

  修改某条记录X的值,然后自动修改其他记录中REGION_ID值等于该记录FID值的X值.

我是这样写的:

DECLARE
XX NUMBER;
CHA NUMBER;
BEGIN
 CHA := :new.X-:old.X;
 SELECT d.X INTO XX FROM NewTable d WHERE d.REGION_ID = :old.FID;
 UPDATE NewTable c SET c.X=XX+CHA
 WHERE c.REGION_ID = :old.FID;
END;

结果报错.

为什么?

------解决方案--------------------
由于在触发器中对本表进行了子操作,网上有解决办法!
顺便提示楼主,以后遇到系统报错的时候可以先在google查询下oracle报出的错误,例如:ora-04091

------解决方案--------------------
估计楼主碰到ORA-04091错误了。在一个触发器中修改基表的记录是危险的。
建议楼主不要把这段逻辑放在触发器里,放到外围的SQL里实现。

------解决方案--------------------
在逻辑外执行update操作吧,Oracle不允许在触发器中对本表进行更新操作