2013-11-23 38 views
-1

我在PL-SQL中触发一个触发器,用于限制我的员工输入表上的部门/部门 中的员工我收到ORA-01403:找不到数据。 请人帮我PLSQL触发器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; 
+0

您什么时候收到此消息?当触发器触发?更重要的是,你是否在网上做过任何研究?只是搜索'ORA-01403'返回很多有用的命中。 –

+0

是的,我做爱,但仍然没有得到欲望的结果。在插入表格之前引发火灾。当有人在表 – user3024346

回答

2

这是锻炼调试代码

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

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

无论如何,您应该这样做,因为试图在触发器中实施这种业务规则是一个严重的错误。它不能扩展,并且在多用户环境下不起作用。

+1

中输入新条目由于触发器是'empmasterinfo'上的行级触发器,我猜测这与预期的数据没有找到有关。一旦当前问题得到解决,下一个问题将是触发器抛出一个突变触发器错误的原因。 –

+0

@JustinCave - 确实如此。 – APC

相关问题