PLSQL触发器ORA 01403未找到数据

时间:2013-11-23 07:59:47

标签: database oracle triggers ora-01403

我在PL-SQL中触发以限制部门/部门中的员工      在我的员工报名表上,我得到了ORA-01403:没有找到数据。      请任何人帮助我

create or replace trigger DEPT_STRENTH
  after insert on empmasterinfo
  for each row
DECLARE
  -- local variables here
  EMP_Count        NUMBER;
  MAX_Strength     NUMBER;
  V_Mainid         VARCHAR2(100);
  V_orgelementname VARCHAR2(100);
BEGIN

--taking value from form

 V_Mainid         := :new.mainid;
  V_orgelementname := :new.orgelementname;

--Comparing values with existing 

  select d.strength
    into MAX_Strength
    from dept_strength d 

-- Master table 


 where d.Mainid = V_Mainid
     and d.orgelementname = V_orgelementname;

  select count(e.employeeid)
    into EMP_Count

-- Master table 


 from empmasterinfo e 
   where e.emp_status = 0
     and e.Mainid = V_Mainid
     and e.orgelementname = V_orgelementname;

  if EMP_Count >= MAX_Strength then

    RAISE_APPLICATION_ERROR(-20101,
                            'Maximum Number of Employees in Department Reached');

  end if;

end DEPT_STRENTH;

1 个答案:

答案 0 :(得分:2)

这是调试代码的练习。

第一步是看你写的是什么。查询抛出NO_DATA_FOUND异常,该查询不返回任何行。您的触发器中有两个查询。但是,聚合查询不会引发该异常,因为计数将返回0.

因此,只有一个查询可以投掷ORA-01403,这清楚地表明您在dept_strength中没有与您在empmasterinfo中插入的行匹配的行。大概你认为你应该在该表中有行,在这种情况下你需要重新审视你的事务逻辑。

无论如何,您应该这样做,因为尝试在触发器中强制执行此类业务规则是一个错误的错误。它不会扩展,也不适用于多用户环境。