PLSQL触发器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;

这是调试代码的练习。

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

因此,只有一个查询可以抛出ORA-01403,这清楚地表明dept_strength中没有任何行与您在empmasterinfo中插入的行相匹配。假设您认为该表中应该有行,在这种情况下,您需要重新访问事务逻辑。

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

相关内容

  • 没有找到相关文章

最新更新