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

4

1 回答 1

1

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

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

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

干杯。

于 2013-11-14T10:07:45.320 回答