如何根据此要求在Oracle中创建触发器
我创建了3个表: 包含sid、sname和dept列的学生表 带有sid列和sname列的mca表 带有sid和sname列的mba表 现在我想创建一个触发器,这样当dept中的值是mca时,sid和sname也进入mca表,如果是mba,则进入mba表 这就是我所尝试的:如何根据此要求在Oracle中创建触发器,oracle,triggers,Oracle,Triggers,我创建了3个表: 包含sid、sname和dept列的学生表 带有sid列和sname列的mca表 带有sid和sname列的mba表 现在我想创建一个触发器,这样当dept中的值是mca时,sid和sname也进入mca表,如果是mba,则进入mba表 这就是我所尝试的: 这显示了一个错误:在表级触发器中不允许使用新的或旧的引用您有一个语句级触发器,但您似乎想要一个行级触发器,因此需要。您的DPTID参考也应与当前行相对应,从:新,而不是学生: 我也加了一个缺失的结尾。你可能想考虑一个case
这显示了一个错误:在表级触发器中不允许使用新的或旧的引用您有一个语句级触发器,但您似乎想要一个行级触发器,因此需要。您的DPTID参考也应与当前行相对应,从:新,而不是学生: 我也加了一个缺失的结尾。你可能想考虑一个case语句,而不是I/ELSIF/OR。您应该在INSERT语句中明确列出列名 在触发器中有一个DBMS_输出调用不是很有用,因为您不能假设执行插入的人会看到它。如果不满足某些条件,则更常见的是抛出异常,这也会阻止主表上的插入
CREATE OR REPLACE TRIGGER MY_TRIGG
AFTER INSERT ON STUDENTS
BEGIN
IF STUDENTS.DPTID=101 THEN
INSERT INTO MCA VALUES(:NEW.SID,:NEW.SNAME);
ELSIF STUDENTS.DPTID=102 THEN
INSERT INTO MCA VALUES(:NEW.SID,:NEW.SNAME);
ELSE
DBMS_OUTPUT.PUT_LINE('NO DEPARTMENT IS FOUND');
END;
CREATE OR REPLACE TRIGGER MY_TRIGG
AFTER INSERT ON STUDENTS
FOR EACH ROW
BEGIN
IF :NEW.DPTID=101 THEN
INSERT INTO MCA (SID, SNAME) VALUES (:NEW.SID,:NEW.SNAME);
ELSIF :NEW.DPTID=102 THEN
INSERT INTO MBA (SID, SNAME) VALUES (:NEW.SID,:NEW.SNAME);
ELSE
DBMS_OUTPUT.PUT_LINE('NO DEPARTMENT IS FOUND');
END IF;
END;