Oracle 触发器问题??? 详情请进.....

时间:2022-06-25 11:01:18
---------------------------
错误
---------------------------
ORA-01403: no data found
ORA-06512: at "CSI2005.TRI_KC06K4", line 7
ORA-04088: error during execution of trigger 'CSI2005.TRI_KC06K4'

查看错误堆栈的程序源?
---------------------------
是(Y)   否(N)   
---------------------------
触发器原程序:
CREATE OR REPLACE TRIGGER TRI_KC06K4
BEFORE INSERT 
ON CSI2005.KC06K4
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW


DECLARE
  s_AAE790 temp_aa83.aae790%TYPE;
  s_YKC130 kc04k1.YKC130%type;
  s_YKC140 kc04k2.YKC140%type;
  str_AAC001 KC06.AAC001%type;
BEGIN
    SELECT AAC001 INTO str_AAC001 from kc06 where AKC020 = :NEW.AKC020;
    /*如果是退费由于不能在发生时立即冲到IC卡上,所以则需要往医保个人帐户收入流水帐表中增加一条记录*/
    IF :NEW.AKC186='9' and :NEW.AKC185 > 0 THEN
      SELECT SEQ_AAE790.NEXTVAL INTO S_AAE790 FROM DUAL;
      DELETE FROM TEMP_AA83 ;
      INSERT INTO TEMP_AA83 (AAE790,AAA831,AAA832) VALUES (S_AAE790,'否','否');
      SELECT SEQ_YKC130.NEXTVAL INTO S_YKC130 FROM DUAL;
      INSERT INTO KC04K1(YKC130,
                       YKC028,
                       AAC001,
                       YKC131,
                       YKC132,
                       YKC133,
                       YKC134,
                       YKC135)
      VALUES( S_YKC130,
            '14',
            str_AAC001,
            :NEW.AKC185,
            :NEW.AAE011,
            :NEW.AKC188,
            :NEW.AKC180,
            :New.YKC101);
    ELSE IF :NEW.AKC186='5' AND :NEW.AKC185 >0 THEN /*如果是正常消费项目,则需要记录到KC04K2表(医保个人帐户支出流水帐)*/
      SELECT SEQ_AAE790.NEXTVAL INTO S_AAE790 FROM DUAL;
      DELETE FROM TEMP_AA83 ;
      INSERT INTO TEMP_AA83 (AAE790,AAA831,AAA832) VALUES (S_AAE790,'否','否');
      SELECT SEQ_YKC140.NEXTVAL INTO S_YKC140 FROM DUAL;
      INSERT INTO KC04K2(YKC140,
                         AAC001,
                         YKC028,
                         YKC141,
                         YKC142,
                         YKC143,
                         YKC144,
                         YKC145)
      VALUES ( s_YKC140,
               str_AAC001,
               '20',
               :NEW.AKC185,
               :NEW.AKC188,
               :NEW.AAE011,
               :NEW.AKC180,
               :NEW.YKC101);
      END IF;
    END IF;


END;
这个触发器怎么会造成上面的错误!

4 个解决方案

#1


SELECT AAC001 INTO str_AAC001 from kc06 where AKC020 = :NEW.AKC020;

报错:
ORA-01403: no data found
ORA-06512: at "CSI2005.TRI_KC06K4", line 7

#2


是不是 SELECT AAC001 INTO str_AAC001 from kc06 where AKC020 = :NEW.AKC020; 
怎么修改让它找不到而不会出现这样的错误啊!而我测试的数据确实可以找到的,但也会出现这样
的错误
=========================================================================
在插入kc06k4表的时候,其实这个触发器有时候可以正常运行,有时候不能正常运行!




#3


lz报错信息提示你,数据库里面没有等于你的新值的信息,所以报错了,你应该在这种情况下,加一个异常处理的。

#4


OK!

#1


SELECT AAC001 INTO str_AAC001 from kc06 where AKC020 = :NEW.AKC020;

报错:
ORA-01403: no data found
ORA-06512: at "CSI2005.TRI_KC06K4", line 7

#2


是不是 SELECT AAC001 INTO str_AAC001 from kc06 where AKC020 = :NEW.AKC020; 
怎么修改让它找不到而不会出现这样的错误啊!而我测试的数据确实可以找到的,但也会出现这样
的错误
=========================================================================
在插入kc06k4表的时候,其实这个触发器有时候可以正常运行,有时候不能正常运行!




#3


lz报错信息提示你,数据库里面没有等于你的新值的信息,所以报错了,你应该在这种情况下,加一个异常处理的。

#4


OK!