如何在oracle上的触发器中获取其他表的值

时间:2013-11-14 09:47:39

标签: oracle

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的值,但我没有理由这样做。所以这是我的代码,但它错误“变异表”。有没有办法做到这一点?请帮忙。
谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

如果您提供表和触发器定义,它会有所帮助。   例如你在哪个表上创建触发器? KODE_RENCANA是表格的主键吗?

如果上述问题的答案为是,那么您不需要执行SELECT语句,因为您可以使用:OLD.TARGET_2获取TARGET_2的值以获取您正在更新的记录。

如果KODE_RENCANA不是主键,并且它实际上是一个可以更新的字段,并且您希望在给定新的KODE_RENCANA值的情况下在同一个表中检索另一条记录,则问题会更复杂,我不会建议使用触发器来处理,而是尝试创建存储过程并调用存储过程来执行更新。

欢呼声。