2017-12-29 12 views
0

ハイ私はソーステーブルと他のターゲットテーブルの2つのテーブルを作成しました。私は、雇用日がSYSDATEより大きい場合、目標表に雇用日を挿入するためのトリガーを作成しました。ただし、日付がターゲット表に挿入されていません。 ここにクエリがあります。私の間違いを訂正してください。前もって感謝します。挿入中のトリガーの発射

CREATE OR REPLACE TRIGGER hir_trg 
BEFORE INSERT 
ON hir_tb 
FOR EACH ROW 
BEGIN 
INSERT INTO trg_tb VALUES (:NEW.h_date); 
END; 
/

DECLARE 
v_date DATE; 
v_er EXCEPTION; 
BEGIN 
v_date := &v_date; 
dbms_output.put_line(v_date); 
IF v_date > SYSDATE THEN 
RAISE v_er; 
END IF; 
INSERT INTO hir_tb VALUES (103, 'abc', v_date, 25400); 
EXCEPTION 
    WHEN v_er THEN 
    dbms_output.put_line('Not a Valid Date'); 
END; 
/

答えて

0

データベースのあなたはquotationsでそれをフォーマットし、nls_date_formatを使用する必要があります&v_dateのは問題なく、使用量は、(ここでは、私はdd.mm.yyyyと仮定)ありません。

DECLARE 
v_date DATE; 
v_er EXCEPTION; 
BEGIN 
v_date := to_date('&v_date','dd.mm.yyyy'); 
dbms_output.put_line(v_date); 
IF v_date > SYSDATE THEN 
RAISE v_er; 
END IF; 
INSERT INTO hir_tb VALUES (103, 'abc', v_date, 25400); 
EXCEPTION 
    WHEN v_er THEN 
    dbms_output.put_line('Not a Valid Date'); 
END; 
0

最初に例外を発生させてからINSERTを実行しています。条件が満たされると、この方法ではINSERTを実行することはありません。 RAISEの前にIF..END IF内に別の挿入物を追加してください。 あなたが言った、

私は上記を使用する場合:INSERT INTO yourtable(col1,col2,col3) VALUES (value1,value2,value3);

EDIT -

IF v_date > SYSDATE THEN 
INSERT INTO hir_tb VALUES (103, 'abc', v_date, 25400); 
RAISE v_er; 
END IF; 
INSERT INTO hir_tb VALUES (103, 'abc', v_date, 25400); 

また、あなたは常に混乱を避けるために、あなたのINSERT文でカラム名を明示的に言及しなければならないことを覚えておいてくださいコードをソーステーブルとターゲット テーブルに挿入しています。しかし、私はターゲットテーブルにのみ挿入する必要があります。

例外ブロックでターゲットテーブルにインサートを追加し、IF..END IF内のインサートを削除します。 TRIGGERの必要はありません。

EXCEPTION 
    WHEN v_er THEN 
    dbms_output.put_line('Not a Valid Date'); 
    INSERT INTO trg_tb VALUES (v_date); 
END; 
+0

上記のコードを使用すると、ソーステーブルとターゲットテーブルに挿入されます。しかし、私はターゲットテーブルにのみ挿入する必要があります。 –

+0

@SRamPrakash:私は答えを更新しました。そうであれば、あなたはトリガーしません。 –

+0

ご協力ありがとうございます。 –

関連する問題