17,086
社区成员
发帖
与我相关
我的任务
分享
--TRY IT
create or replace trigger updateage
before update of age on emp
for each row
when(new.age>50)
begin
:new.age:=:old.age;
end;
自治事务的trigger是可以commit的。
出错的原因是,你在更新empid=2的记录,但是它触发了你的trigger,而你的trigger也是要更新empid=2的记录,
所以trigger无法获取lock,所以报错。
不过你的这个需求可以通过如下的trigger解决:
CREATE OR REPLACE TRIGGER UPDATEAGE
BEFORE UPDATE ON EMP
FOR EACH ROW
/*DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;*/
BEGIN
DBMS_OUTPUT.PUT_LINE(:NEW.AGE || '---' || :OLD.AGE || '---' ||
:OLD.EMPID);
IF (:NEW.AGE > 50) THEN
/*UPDATE EMP SET AGE = :OLD.AGE WHERE EMPID = :OLD.EMPID; --也要修改表数据()
COMMIT;*/
:new.age:=:old.age;
END IF;
END;
/