ORACLE 如何实现一个删除表数据之后将删除得数据重新再次插入该表得触发器

为了不让别人修改表数据,现有个a表,里面有约束,避免重复,当我删除一条记录得时候,就自动插入刚才删除得记录得触发器,怎么试过都不行,这个代码编译通过,但执行删除del语句报错,

删除前记录数是26489,我删除一条或多条记录后希望也是26489

CREATE OR REPLACE TRIGGER ORG_RB
   AFTER DELETE
   ON ECP_GPF_INST_DMTBL
   FOR EACH ROW
   DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
 INSERT INTO ECP_GPF_INST_DMTBL values(:OLD.DATA_DT,
:OLD.BO_ID,
:OLD.BO_NM,
:OLD.BLNG_SUBBR_INSID,
:OLD.BLSUBBRINSCHNFL_NM,
:OLD.BLNG_LVL2_BR_INSID,
:OLD.BLLVL2BRINSCHNFL_NM,
:OLD.BLNG_LV1_BR_INSID,
:OLD.BLLVL1BRINSCHNFL_NM,
:OLD.BLNG_HQ_INSID,
:OLD.BLHQINSCHNFL_NM,
:OLD.CCBINS_ID,
:OLD.CCBINS_ADMNHIER_CD,
:OLD.WLTH_CNTR_IND,
:OLD.WLTHMGTCNTR_IND,
:OLD.CCBINS_CHN_FULLNM);

commit;
END ;
/

 

根据你提供的触发器代码和报错信息,可以看出问题并不是出在触发器本身,而是在删除语句执行的过程中出了问题。具体来说,报错信息显示你的删除语句没有指定要删除的具体记录,而是使用了一个子查询来筛选记录。可能是因为这个子查询返回了多条记录导致删除操作失败。

解决这个问题的方法就是修改你的删除语句,确保它只会删除一条记录。例如,如果你要删除 BO_ID 为 123 的记录,可以这样写:

DELETE FROM ECP_GPF_INST_DMTBL WHERE BO_ID = 123;

这样就能够正确触发你的触发器并插入被删除的记录了。不过需要注意,如果你的表里有多条 BO_ID 相同的记录,这个删除语句也只会删除其中的一条,所以需要根据具体情况来确定正确的删除方法。