0

だから私は3つのテーブルを持っています。最初の 2 つには、ID 列と「ランク」列 (整数) があります。3 番目のテーブルに両方の ID (ID1、ID2) を挿入しますが、挿入する前にそれらが同じランクであるかどうかを確認するトリガーが必要です。私はそれを働かせることができません。

CREATE OR REPLACE TRIGGER TRIGGER1 
AFTER INSERT ON TABLE_C 

BEGIN
IF NOT EXISTS (
SELECT TABLE_A.id, TABLE_B.id
FROM TABLE_A JOIN TABLE_B ON TABLE_A.rank = TABLE_B.rank
WHERE TABLE_A.id = inserted.id1 AND TABLE_B.id = inserted.id2 )
THEN
PRINT 'Not the same rank'
ROLLBACK
END
END;

私はOracleデータベースを使用しています。

4

2 に答える 2

1

Oracle Triggers で「ロールバック」または「コミット」を使用することはできません。 これを参照してください

次のようにトリガーを変更できると思います-

CREATE OR REPLACE TRIGGER Trigger1
    AFTER INSERT ON Table_c
    FOR EACH ROW
  DECLARE
    l_Count NUMBER := 0;
  BEGIN
    SELECT COUNT(*)
      INTO l_Count
      FROM Table_a
      JOIN Table_b ON Table_a.Rank = Table_b.Rank
     WHERE Table_a.Id = :NEW.Id1
       AND Table_b.Id = :NEW.Id2;
    IF l_Count = 0 THEN
      DELETE FROM Table_c
       WHERE Id1 = :NEW.Id1
         AND Id2 = :NEW.Id2;
      --PRINT 'Not the same rank'
      Dbms_Output.Put_Line('Not the same rank');
    END IF;
  END;
/
于 2013-05-12T10:56:08.610 に答える