Вставить внутренний триггер, который не срабатывает

#oracle #triggers #oracle10g

#Oracle #триггеры #oracle10g

Вопрос:

Привет, у меня есть этот простой триггер в 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,'0','0','035823','Draft',' ',' ',34,' ',0,461,0,0,'035105',trunc(sysdate),' ','A',Lpad(:NEW.ISSUED_BY,6,'0'),Lpad(:NEW.ISSUED_BY,6,'0'),trunc(sysdate),'A',:New.BATCH_NO,out_);
      --insert action
      SP_INSERTTBLFORMYACTION(Lpad(:NEW.ISSUED_BY,6,'0'), out_, Lpad(:NEW.ISSUED_BY,6,'0'), Lpad(:NEW.ISSUED_BY,'0'), 'Draft');
      
      --Insert other affected Lots
      insert into TBLD2LOT(NCRBSERIESNO,LOTNO,CREATEDBY,CREATEDDT,SEQNO) Select (out_), A.BATCH_NO,Lpad(:NEW.ISSUED_BY,6,'0'),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 хранимые процедуры работают нормально, но запрос insert — нет.
Я пытаюсь вручную выполнить запрос insert, заменив Out_ и :new.Ocap_no он работает нормально.
Что-то не так в моем запросе?

Надеюсь, кто-нибудь поможет мне с этим.

Ответ №1:

Если он не работает, то

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

это означает, что ни одна строка в не OCAP_OTHERBATCH содержит OCAP_ID значение, равное :NEW.OCAP_NO .

Может быть из-за неправильного регистра букв, CHAR тип данных (заполненный пробелами справа до полной длины столбца), … кто знает. Без описания таблиц и примеров данных трудно догадаться.

Комментарии:

1. Он выполнил условие, я пытаюсь выбрать обе таблицы, в которых есть данные

2. Как я уже сказал: предоставьте тестовый пример — СОЗДАЙТЕ ТАБЛИЦУ и ВСТАВЬТЕ В образец данных. Процедуры не имеют значения, вы сказали, что они выполнены успешно, поэтому сбой происходит только в операторе SELECT ВСТАВКИ.

3. o теперь я вижу проблему, в таблице еще нет данных после вставки, но запрос на обновление сейчас не работает, я пытаюсь отменить его комментарий