Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据此要求在Oracle中创建触发器_Oracle_Triggers - Fatal编程技术网

如何根据此要求在Oracle中创建触发器

如何根据此要求在Oracle中创建触发器,oracle,triggers,Oracle,Triggers,我创建了3个表: 包含sid、sname和dept列的学生表 带有sid列和sname列的mca表 带有sid和sname列的mba表 现在我想创建一个触发器,这样当dept中的值是mca时,sid和sname也进入mca表,如果是mba,则进入mba表 这就是我所尝试的: 这显示了一个错误:在表级触发器中不允许使用新的或旧的引用您有一个语句级触发器,但您似乎想要一个行级触发器,因此需要。您的DPTID参考也应与当前行相对应,从:新,而不是学生: 我也加了一个缺失的结尾。你可能想考虑一个case

我创建了3个表:

包含sid、sname和dept列的学生表 带有sid列和sname列的mca表 带有sid和sname列的mba表 现在我想创建一个触发器,这样当dept中的值是mca时,sid和sname也进入mca表,如果是mba,则进入mba表

这就是我所尝试的:


这显示了一个错误:在表级触发器中不允许使用新的或旧的引用

您有一个语句级触发器,但您似乎想要一个行级触发器,因此需要。您的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;