2017-09-12 14 views
0

新しいトリガーを作成したときに私の問題がわかりません。 私の構文は正しいですか?ありがとう! ConsoleLogging paneOracleトリガー - 挿入前の状態

P/S:これは私のコンソール表示私は値

CREATE OR REPLACE TRIGGER EX03_3 
 
BEFORE INSERT ON HR.CHITIETDATHANG 
 
FOR EACH ROW 
 
DECLARE 
 
    TONGHANG NUMBER; -- Total Items 
 
    HANGHIENCO NUMBER; -- Items present 
 
    HANGDABAN NUMBER; -- Items was sales. 
 
BEGIN 
 
    -- Get total Items 
 
    SELECT SUM(MH.SOLUONG) INTO TONGHANG 
 
    FROM HR.MATHANG MH; 
 

 
    -- Get total Items was sales 
 
    SELECT SUM(CTDH.SOLUONG) INTO HANGDABAN 
 
    FROM HR.CHITIETDATHANG CTDH; 
 
    
 
    -- Items present 
 
    HANGHIENCO := TONGHANG - HANGDABAN; 
 
    
 
    IF(HANGHIENCO >= HANGDABAN) THEN 
 
     HANGHIENCO := HANGHIENCO-1; 
 
     INSERT INTO HR.CHITIETDATHANG VALUES(:NEW.SOHOADON,:NEW.MAHANG, 
 
      :NEW.GIABAN,:NEW.SOLUONG,:NEW.MUCGIAMGIA); 
 
     ROLLBACK; 
 
    END IF; 
 
    NULL; 
 
END;

+0

エラーが発生するトリガは「EX04_4」ですが、ここに示すものは「EX03_3」です。 –

+0

どのようなロジックを実装しようとしていますか?トリガーは計算を行いますが、結果として何が起こりたいですか? – Rene

+1

あなたがしようとしていることは明確ではありませんが、トリガーを実装する方法に問題があると思います。トリガーはコミットまたはロールバック(自律的でない限り)を行うことはできず、なぜ表のトリガーから同じ表に挿入するのかはわかりません。トリガーを使用して挿入するかどうかを決定する必要がある場合は、ビューの使用と「挿入の代わり」の使用を検討するとよいでしょう。また、他のテーブルから集計すると、2つの選択に対して一貫したスナップショットが作成されず、外部キーの適切なインデックスが作成されない限り、ロックの問題が発生する可能性があります。 –

答えて

0

を挿入しようとすると、2つの重要なミス

1に見える)トリガは、本体内にHR.CHITIETDATHANGに挿入しようとしますHR.CHITIETDATHANGのトリガを挿入します。

2)insertステートメントが役に立たない後にrollbackを使用する。

注:これらのselect文でraise no_data_foundを作成するのに関連するものは何も表示されません。 EX03_3とEX04_4は混乱しています.Kaushik Nayakは言うとおりです。