插入内部触发器不触发

问题描述

嗨,我在oracle中有这个简单的触发器

CREATE OR REPLACE TRIGGER OCAP_CREATE_NCRB
BEFORE INSERT
ON OCAP_TBLOCAP
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
       Defect_Type    varchar2(16);
       out_           varchar2(60);
BEGIN

  Select A.DEFECT_TYPE into Defect_Type from OCAP_TBLDEFECT A where A.DEFECT_ID = :NEW.DEFECT;

   IF Defect_Type = 'C' THEN
         --Create NCRB
         
      SP_INSERTTBLD1D2(23,LPAD(:NEW.ISSUED_BY,6,'0'),'0','035823','Draft',' ',34,461,'035105',trunc(sysdate),'A',Lpad(:NEW.ISSUED_BY,:New.BATCH_NO,out_);
      --insert action
      SP_INSERTTBLFORMYACTION(Lpad(:NEW.ISSUED_BY,out_,'Draft');
      
      --Insert other affected Lots
      insert into TBLd2lOT(NCRBSERIESNO,LOTNO,CREATEDBY,CREATEDDT,SEQNO) Select (out_),A.BATCH_NO,sysdate,(TBLd2lOTSEQ.nextval) from OCAP_OTHERBATCH A where A.OCAP_ID = :NEW.OCAP_NO;

      
      --add NCRBSeries no. to table OCAP_TBLOCAP for referencing
     Update OCAP_TBLOCAP set NCRBSERIESNO = out_ where OCAP_NO = :NEW.OCAP_NO;
      
      --Insert ocap history 
      
   END IF;
   
   
END Ocap_Create_NCRB;
/

前2个存储过程工作正常,但插入查询不是。 我尝试通过替换Out_:new.Ocap_no来手动执行插入查询,它工作正常。 我的查询有问题吗?

希望有人帮我解决这个问题。

解决方法

如果无效,则

from OCAP_OTHERBATCH A 
where A.OCAP_ID = :NEW.OCAP_NO;      --> this condition is never met

这意味着OCAP_OTHERBATCH中没有行包含等于OCAP_ID的{​​{1}}值。

可能是由于字母大小写错误,:NEW.OCAP_NO数据类型(用空格填充,直到列的完整长度),...谁知道。没有表的描述和示例数据,很难猜测。