declare
tgl RENC_DITSEK.TGL_INPUT%TYPE;
thn varchar(10) := :new.tahun + 1;
target RENC_DITSEK.TARGET_2%TYPE;
BEGIN
select TARGET_2 into target from RENC_DITSEK where KODE_RENCANA = :NEW.KODE_RENCANA;
SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') INTO tgl FROM DUAL;
IF UPDATING ('TARGET_2') THEN
INSERT INTO NOTE_LOG VALUES(:NEW.PKP,'',:NEW.INDIKATOR,'Target Tahun '||thn,'',:new.target_2,**target**,tgl,'','0');
END IF;
END;
嗨,有我的触发器体。在更新之前我需要TARGET_2的值,但我没有理由这样做。所以这是我的代码,但它错误“变异表”。有没有办法做到这一点?请帮忙。
谢谢你的帮助。
答案 0 :(得分:1)
如果您提供表和触发器定义,它会有所帮助。 例如你在哪个表上创建触发器? KODE_RENCANA是表格的主键吗?
如果上述问题的答案为是,那么您不需要执行SELECT语句,因为您可以使用:OLD.TARGET_2获取TARGET_2的值以获取您正在更新的记录。
如果KODE_RENCANA不是主键,并且它实际上是一个可以更新的字段,并且您希望在给定新的KODE_RENCANA值的情况下在同一个表中检索另一条记录,则问题会更复杂,我不会建议使用触发器来处理,而是尝试创建存储过程并调用存储过程来执行更新。
欢呼声。