2011-12-22 11 views
0

コンパイルエラーが発生する監査トリガーを作成しようとしました。 監査トリガー警告を作成中にコンパイルエラー

は、あなたが正確なエラーメッセージやテーブル h_dat_cample_reqの構造を提供していない

DROP TRIGGER DB.DAT_CAMPLE_REQ_Test; 

CREATE OR REPLACE TRIGGER DB."DAT_CAMPLE_REQ_Test" 
AFTER insert or update or delete on DAT_CAMPLE_REQ 
FOR EACH ROW 
declare 
    dmltype varchar2(6); 
BEGIN 
    if deleting then 

    INSERT INTO h_dat_cample_req VALUES  (  
     :Old.REQUEST_ID,  
     :Old.SAMPLE_ID,  
     :Old.CASSAY_ID,  
     :Old.CASCADE_ID,  
     :Old.STATUS_ID,  
     :Old.AUTHOR,  
     :Old.CRT_SAE,  
     :Old.SCREEN_SAE 
    ); 

    else 

    if inserting then 

     dmltype := 'insert'; 

    elsif updating then 

     dmltype := 'update'; 

    end if; 

    INSERT INTO h_dat_cample_req VALUES 
    (
     :New.REQUEST_ID, 
     :New.SAMPLE_ID, 
     :New.CASSAY_ID, 
     :New.CASCADE_ID, 
     :New.STATUS_ID, 
     :New.AUTHOR, 
     :New.CRT_SAE,  
     :New.SCREEN_SAE 
    ); 

    end if; 

END; 
+1

あなたが得ているエラーは大きな助けになります。 –

+0

コンパイルエラーで作成されたトリガ...これは取得中です...... – user1111706

+0

エラーを表示するには、次のように入力してください: 'SHOW ERRORS TRIGGER DB.DAT_CAMPLE_REQ_Test' –

答えて

0

..トリガーを作成するために私を助けてくださいことができたので、私は私が持っているつもりだ怖いです推測。

h_dat_cample_reqの列名が期待どおりの順序でないか、またはINSERTステートメントで値を指定していない他の列がテーブルにあると思われます。

INSERTステートメントを使用していますが、各値を入力する列は表示されません。この形式のINSERTステートメントを使用する際の問題は、テーブル内の列が正確にその順序にない場合、または追加または削除された列がある場合はエラーが発生し、それを追跡することは困難です。さらに、コンパイルエラーがなければ、間違った列にデータが挿入される可能性があります。列に名前を付けると、どの列にどの値が入るかが明確になり、削除された列を識別しやすくなります。また、表内のすべての列の値を指定する必要はありません。 a NULL値。

いつもINSERTステートメントの列に名前を付けることを強くお勧めします。代わりに書き込み

INSERT INTO some_table VALUES (value_1, value_2, ...); 

書き込みところで

INSERT INTO some_table (column_1, column_2, ...) VALUES (value_1, value_2, ...); 

の他の言葉では、あなたはdmltypeあなたの変数に値を代入しているが、あなたはどこでも、その値を使用していません。これはコンパイルエラーを引き起こすことはありませんが、それはあなたのトリガーが期待していたことを全くしていないかもしれないというサインです。おそらく、あなたのh_dat_cample_reqテーブルは履歴テーブルであり、実行される操作のタイプの列がありますか?

関連する問題