读书人

oracle触发器修该某条记录某个字段值时

发布时间: 2014-01-22 14:50:12 作者: rapoo

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;

结果报错.

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

[解决办法]
在逻辑外执行update操作吧,Oracle不允许在触发器中对本表进行更新操作

读书人网 >oracle

热点推荐