2つのテーブルがありますが、これらのテーブルはDIFFERENT DATABASEにあります。私がやろうとしているのは、STUDENTテーブルを更新し、UNIVERSITYテーブルに存在しない大学に入ると、エラーが表示されるはずのトリガーを作成することです。しかし、私は何の誤りもありません。ここに私の試みは、以下のとおりです。Oracle Trigger:値がデータベースBに存在しない場合、データベースAのテーブルにエラーを表示します
表:
UNIVERSITY - DatabaseA
| Student(PK) | State |
| A | X State |
| B | Y State |
| C | B State |
STUDENT - DatabaseB
| Student_Name (PK) | Grade | University (PK)(FK) |
| James | D | A |
| Andrew | HD | B |
| James | D | C |
トリガー:
DELIMITER //
CREATE OR REPLACE TRIGGER student_trigger
BEFORE UPDATE ON student
FOR EACH ROW
DECLARE temp_count INTEGER;
BEGIN
SELECT COUNT(*) INTO temp_count
FROM [email protected] u
WHERE u.Student = :OLD.Student;
IF (temp_count < 1)
THEN RAISE_APPLICATION_ERROR(-20101, 'Error:Uni doesnt exist');
END IF;
END;
これは動作し、更新が正常である:
UPDATE student
SET Grade = 'C'
WHERE Student_Name = 'James'
AND University = 'A';
しかし、私は、更新を実行すると、以下のようにどこの大学がDatabaseAのUniversityテーブルに存在しないかを更新しようとすると、エラーは発生しません。私は入れ大学名がDatabaseA
なぜ「大学」というテーブルに「学生」と呼ばれる主キー列がありますか?あなたのデータ構造は非常に扱いにくいようです。 –
申し訳ありませんが、学生テーブルには大学名と学生名の複合主キーがあります。私は自分の質問を編集しました – iPho
あなたの更新文のtablenameを 'room'から' student'に調整してください –