日期:2014-05-17  浏览次数:20728 次

触发器问题 大家帮看看
CREATE   OR   REPLACE   TRIGGER   HRBEURS.TR_ADD_XXY_KH_GZL_TY
BEFORE   INSERT  
ON   HRBEURS.XXY_KH
REFERENCING   OLD   AS   OLD   NEW   AS   NEW
FOR   EACH   ROW  
declare
    tmp     int;
    begin
        GZL:=   100*Z/A+N;
        select   (select   count(*)   from   XXY_KH   where   JGH   =   :new.JGH   and   ND   =   :new.ND)   into   tmp   from   dual;
        if   (tmp   >   0)   then
                update   XXY_KH   set   GZL   =   '54 '   where   JGH   =   :new.JGH   and   ND   =   :new.ND;
                DBMS_OUTPUT.PUT_LINE( 'updatesql ');
                raise_application_error(-20009, 'The   application   not   alow   execute   this   action ');
          else
                null;
                DBMS_OUTPUT.PUT_LINE( 'ok ');
          end   if;
    end;
/

就是向一个表中插入记录,如果已经存在就更新原先的记录   如果不存在就插入    
我这个触发器插入一条新的记录之后(记录已经存在)   是没有插入新的记录但也没有更新原先符合条件的记录
大家帮我看看有什么毛病
为什么更新语句
update   XXY_KH   set   GZL   =   '54 '   where   JGH   =   :new.JGH   and   ND   =   :new.ND;         不执行呢

------解决方案--------------------
由于你的触发器是 BEFORE INSERT 类型
则执行这个触发器是插入之前触发,那么
tmp 就永远为0