PL / SQL触发器更新或删除

时间:2014-03-09 23:12:37

标签: oracle plsql triggers

我有两个表,其输出如下:

Project Table
CODE         NAME                           
------------ -------------- 
101          Alpha                       
222          Beta                       
355          Gamma                       
973          Delta                   

Assignment Table
ID    NAME         PROJCODE       HOURS              
----- ------------ -------------- ------------ 
55055 Smith        101            20                     
55055 Smith        222            10                     
39002 Hammond      973            25                     
00001 Preston      355            5                      
10000 Logan        355            5                      
00777 Bond         222            20                        

如果更新/删除了作业表中项目的最后一个人(因此projcode没有为其分配人员),我想将其从项目表中删除。我想将它输出到DBMS_OUTPUT。我编写了以下触发器,但每次尝试测试触发器时都会出错。

CREATE OR REPLACE TRIGGER project_removal_trigger AFTER
  DELETE OR
  UPDATE ON ASSIGNMENT FOR EACH ROW DECLARE PRINT project.code%type;
  BEGIN
    DELETE
    FROM PROJECT
    WHERE code NOT IN
      (SELECT Projcode FROM assignment GROUP BY projcode HAVING COUNT(name) > 0
      );
  END;

我做错了什么?

1 个答案:

答案 0 :(得分:0)

触发器无法从触发的表格中进行选择。否则你会得到ORA-04091:表XXXX正在变异,触发/功能可能看不到它。尽量不要在触发器中加入过多的逻辑。