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