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 はテーブルの主キーですか?

上記の質問に対する答えが「はい」の場合、更新するレコードに対して :OLD.TARGET_2 を使用して TARGET_2 の値を取得できるため、SELECT ステートメントを実行する必要はありません。

KODE_RENCANA が主キーではなく、実際には更新可能なフィールドであり、新しい KODE_RENCANA 値を指定して同じテーブル内の別のレコードを取得したい場合、問題はより複雑になります。トリガーを処理する代わりに、ストアド プロシージャを作成し、ストアド プロシージャを呼び出して更新を実行してみてください。

乾杯。

于 2013-11-14T10:07:45.320 に答える