0

いくつかのトリガーが原因で、テーブルにデータを挿入するときに問題が発生しています。たとえば、次のトリガーは、教授が学生ではないことを確認します。

CREATE TRIGGER StudentOrProfessor2
AFTER INSERT ON Professor
FOR EACH ROW
BEGIN
   DELETE FROM Professor
   WHERE (:NEW.ID IN (SELECT Student.ID FROM Student));
END;
/

しかし、Professor リレーションにタプルを挿入すると、次のエラーが発生します。

SQL> INSERT INTO Professor VALUES('44415676', '246813579', 'Mathematics', '2', '000070000', '317', '3921234');
INSERT INTO Professor VALUES('44415676', '246813579', 'Mathematics', '2', '000070000', '317', '3921234')
           *
ERROR at line 1:
ORA-04091: table S11022CZ.PROFESSOR is mutating, trigger/function may not see
it
ORA-06512: at "S11022CZ.STUDENTORPROFESSOR2", line 2
ORA-04088: error during execution of trigger 'S11022CZ.STUDENTORPROFESSOR2'

これを回避するために何をすべきかよくわかりません。

4

1 に答える 1

0

テーブルにトリガーを作成してから、トリガー内でそのテーブルを変更することはできないと確信しています。学生が教授テーブルに挿入されないようにしようとしていますか? ID は内部データベース キー (1,2,3,4....) ですか、それとも何らかの意味を持つビジネス キーですか? (すなわち S11022CZ)

それが意味のない内部データベース キー (増加する数字など) である場合、ID 73 の Student Joe Bloggs がある場合はどうなるでしょうか。次に、Professor レコード Prof Juluis Sumner を作成すると、彼の ID は 73 になりますか?

基本的に、ここにはデータベースの設計上の問題があると思います。

于 2012-11-14T05:59:59.913 に答える