1

我创建了触发器以在插入后更新 oracle 数据库表。

CREATE OR REPLACE TRIGGER Update_ACU     
  AFTER INSERT ON TBL_ACU      
  FOR EACH ROW    
BEGIN       
  UPDATE TBL_ACU     
  SET    CURRENCY = 'XXX'    
  WHERE  ACCOUNT like '%1568';   
END ;


I inserted record as

insert into TBL_ACU values('23','USD','1231568');

我收到表 ORACLE 变异触发器错误。

请帮助我如何解决这个问题。

4

2 回答 2

0

好吧,如果在修改该表时调用触发器,则不能从触发器修改该表。这个问题有多种解决方案,包括AFTER STATEMENT在 PL/SQL PACKAGE 中定义的某些集合中的触发器和缓存修改,但是在您的情况下,我宁愿将触发器的主体更改为:

BEGIN
  IF :NEW.ACCOUNT LIKE '%1568' THEN
      :NEW.CURRENCY := 'XXX';
  END IF;
END;

您可以在触发器中使用:NEW和变量,它们相应地识别记录的值和值。修改记录的值将导致实际插入数据库的数据发生变化。:OLD:NEW

于 2013-10-10T09:47:36.873 回答
0

最好使用BEFORE INSERT触发器来执行此操作。

像这样试试

CREATE OR REPLACE 
TRIGGER update_acu
     BEFORE INSERT ON tbl_acu
     FOR EACH ROW
     WHEN (NEW.ACCOUNT LIKE '%1568')
BEGIN
     :NEW.currency := 'XXX';
END ;
于 2013-10-10T09:48:25.227 回答