LOOP
      begin
        fetch get_my_cursor
          into N_MANAGECOM_ID, N_AGENTCODE_ID, N_ACC_PREM, N_ACC_STAND_PREM, N_ACC_LCONT_NUM, N_REAL_PREM, N_REAL_STANDPREM, N_REAL_LCONT_PREM, N_TOTAL_FYC;
        EXIT WHEN get_my_cursor%NOTFOUND;       SELECT   SUM(NVL(D.FYC,0.0000)) INTO N_FACT_FYC
                FROM LACOMMISION  D
                WHERE D.WAGENO IS NOT NULL
                AND D.AGENTCODE_ID = N_AGENTCODE_ID
                AND D.MANAGECOM_ID = N_MANAGECOM_ID
                AND D.WAGENO = SUBSTR(in_date,1,6)
                GROUP BY D.WAGENO, D.AGENTCODE_ID, D.AGENTCODE, D.MANAGECOM;        UPDATE F_PersonalAGENTDayAchievement
           SET ACC_LCONT_NUM   = N_ACC_LCONT_NUM,
               ACC_PREM        = N_ACC_PREM,
               ACC_STAND_PREM  = N_ACC_STAND_PREM,
               REAL_PREM       = N_REAL_PREM,
               REAL_STANDPREM  = N_REAL_STANDPREM,
               REAL_LCONT_PREM = N_REAL_LCONT_PREM,
               REAL_FYC        = N_TOTAL_FYC,
               FACT_FYC        = N_FACT_FYC
         WHERE stat_date = TO_DATE(in_date, 'YYYYMMDD')
           AND managecom_id = N_MANAGECOM_ID
           AND agentcode_id = N_AGENTCODE_ID;
         .....      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          Err_Row_Num := Err_Row_Num + 1;
          pub.G_SAVEERR(in_crc_no,
                        sysdate,
                        'F_PersonalAGENTDayAchievement',
                        in_crc_no || '||' || N_ManageCom_ID || '||' ||
                        N_AgentCode_ID,
                        '无数据');          commit;
      end;
    end loop;
如上存储过程,现在问题是执行到 SELECT  SUM(NVL(D.FYC,0.0000)) INTO N_FACT_FYC  FROM LACOMMISION  D ..
这句话时没有查询到记录,就跳到异常处理
我如何让SELECT 语句在没有查询到数据的情况下继续执行下面的UPDATE 语句?
也就是说SELECT 查不到数据时不捕捉SELECT 中的异常,而UPDATE 异常要正常捕捉.

解决方案 »

  1.   

    简单,给 SELECT SQL文 套一个结构体
    begin   select ....EXCEPTION
            WHEN NO_DATA_FOUND THEN
              不做任何处理
            WHEN OTHERS 
               RAISE
    END
      

  2.   

    EXCEPTION
      WHEN NO_DATA_FOUND THEN
      不做任何处理   
      WHEN OTHERS  
      RAISE
    END
      

  3.   

    一,先select count(*) into 变量...如果发现了变量<> 1 不做你自己的select into 继续执行update
       如果变量 = 1 做你自己的select into ,继续执行update 二,异常可以嵌套,但是你少了一个too_many_rows的异常处理,假定你不会存在查出来多条
        EXCEPTION
            WHEN NO_DATA_FOUND THEN  
                begin
                    --做你的update;
                    exception 
                    when update异常 then
                        --做你的update异常处理
                end;
      

  4.   

    求和哪来的 too_many_rows 异常
      

  5.   

    可以先select一下总条数,然后再判断总条数是否为0,若为0,不作任何处理,应该可以解决!楼主可以试试!
      

  6.   


    那你知不知道只要出了NO_DATA_FOUND异常,你后面的update永远不会执行?
      

  7.   


    你回去好好补一下SQL,sum是求组里的和,他后面有group子句,分出来几组就有几行,你扫一眼SQL就能看出来他表里的数据刚好只能分一组?
      

  8.   

    会吗?!我的意思是给 SELECT SQL文加个单独的 
       BEGIN
        SELECT ....
       EXCEPTIOM
     
       END
      
       UPDATE......
    难道会不执行后面的UPDATE 语句吗? 不会吧
      
      

  9.   


    加在begin end块里的exception肯定不会影响块外面的代码,那是我眼花,道歉