由于我的一些触发器,当我将数据插入表格时,我遇到了问题。例如,以下内容 触发确保教授不是学生。
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'
我不太清楚如何解决这个问题。
答案 0 :(得分:0)
我很确定你不能在表上创建触发器然后在触发器中修改该表。您是否在努力确保未将学生插入教授表中? ID是内部数据库密钥(1,2,3,4 ....)还是具有某种含义的业务密钥? (即S11022CZ)
如果它是一个毫无意义的内部数据库密钥(例如递增的数字),那么如果你有学生Joe Bloggs,ID 73,那么你创建一个教授记录Juluis Sumner教授,他的ID为73?
基本上我认为这里存在数据库设计问题。