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;
/

但是,当我在教授关系中插入一个元组时,出现以下错误。

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)

如果它是一个无意义的内部数据库键(例如递增的数字),那么如果您有 Student Joe Bloggs,ID 73。然后您创建一个教授记录 Prof Juluis Sumner,他的 ID 为 73?

基本上我认为这里存在数据库设计问题。

于 2012-11-14T05:59:59.913 回答