2016-10-12 2 views
-3
CREATE OR REPLACE TRIGGER trg_placement 
    AFTER INSERT OR DELETE OR UPDATE 
    ON lds_placement 
    FOR EACH ROW 
    ENABLE 
DECLARE 
    v_user         VARCHAR2(30); 
    v_date         VARCHAR2(30); 
BEGIN 
    SELECT USER, TO_CHAR(SYSDATE, 'DD/MON/YYYY HH24:MI:SS') 
     INTO v_user, v_date 
     FROM DUAL; 

    IF INSERTING 
    THEN 
     INSERT INTO audit_trial(
           placement_id, 
           new_name, 
           old_name, 
           user_name, 
           audit_date, 
           audit_operation 
           ) 
      VALUES (
        :NEW.plt_short_desc, 
        NULL, 
        v_user, 
        v_date, 
        'INSERT' 
        ); 
    ELSIF DELETING 
    THEN 
     INSERT INTO audit_trial(
           placement_id, 
           new_name, 
           old_name, 
           user_name, 
           audit_date, 
           audit_operation 
           ) -----line 16 is here.statement ignored 
      VALUES (
        NULL, 
        :OLD.plt_short_desc, 
        v_user, 
        v_date, 
        'DELETE' 
        ); 
    ELSIF UPDATING 
    THEN 
     INSERT INTO audit_trial(
           placement_id, 
           new_name, 
           old_name, 
           user_name, 
           audit_date, 
           audit_operation 
           ) 
      VALUES (
        :NEW.plt_short_desc, 
        :OLD.plt_short_desc, 
        v_user, 
        v_date, 
        'UPDATE' 
        ); 
    END IF; 
END trg_placement; 

に行う変更私はこのエラーを取得する:APEXでの検定;監査にユーザーがソース表lds_placement

Error at line 16: PL/SQL: SQL Statement ignored

+1

[尋ねる]から: "あなたは忙しい同僚と話しているふりをする"。 "緊急に"質問を投稿する最良の方法ではありません – Aleksej

+2

6列に5つの値を挿入 – Aleksej

+0

ありがとう!エラーを修正しました。 – patience

答えて

0
CREATE OR REPLACE TRIGGER trg_placement 
AFTER INSERT OR DELETE OR UPDATE ON lds_placement 
FOR EACH ROW 
DECLARE 
v_user varchar2(30); 
v_date varchar2(30); 
BEGIN 
SELECT user, TO_CHAR(sysdate,'DD/MON/YYYY HH24:MI:SS') INTO v_user,v_date FROM dual; 
IF INSERTING 
THEN 
INSERT INTO audit_trial(placement_id,new_name,old_name,user_name,audit_date ,audit_operation) 
VALUES(:old.placement_id,:NEW.plt_short_desc,:OLD.plt_short_desc,v_user,v_date,'UPDATE'); 

ELSIF DELETING 
THEN 
INSERT INTO audit_trial(placement_id,new_name,old_name,user_name,audit_date,audit_operation) 
VALUES(:OLD.placement_id,:NEW.plt_short_desc,:OLD.plt_short_desc,v_user,v_date,'DELETE'); 

ELSIF UPDATING 
THEN 
INSERT INTO audit_trial(placement_id,new_name,old_name,user_name,audit_date ,audit_operation) 
VALUES(:OLD.placement_id,:NEW.plt_short_desc,:OLD.plt_short_desc,v_user,v_date,'UPDATE'); 
END IF; 
END trg_placement; 

私は変更を行ったし、それが働いています。

ループトゥステートメントを監査トライアルに追加しようとしています。そのため、ユーザーがソーステーブルlds_placementの任意の列に変更を加えると監査されます。しかし、私のクエリから、このトリガーは1つの列plt_short_descだけです。私はすべての列を必要とします。あなたはその質問を手伝ってください。