解决方案 »

  1.   

    exit when emp_cursor%notfound;
    应该是这里异常时代码快已经退出了,并没有运行到捕捉
    你换成if emp_cursor%notfound then raise no_data_found;来判断然后再raise就可以捕捉到!
      

  2.   

    首先你要明白EXCEPTION 要放在END 以后,你可以在BEGIN END 里面再嵌套BEING END
      

  3.   

    举个例子吧,我测试了一把,嵌套了也是输出不了nodatafound
      

  4.   

    游标没有数据返回不是异常,不会触发EXCEPTION.不过可以通过获取游标记录数来判断DECLARE
      CURSOR EMP_CURSOR(DNO VARCHAR2) IS
        SELECT T.FND_ID, T.FND_VERS FROM TGP_FUNDS T WHERE T.FND_ID = DNO;
      V_ENAME VARCHAR(10);
      V_SAL   VARCHAR2(10);
    BEGIN
      OPEN EMP_CURSOR('MPGF');
      LOOP
        FETCH EMP_CURSOR
          INTO V_ENAME, V_SAL;
        EXIT WHEN EMP_CURSOR%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(V_ENAME || V_SAL);
      END LOOP;
      IF EMP_CURSOR%ROWCOUNT = 0 THEN
        DBMS_OUTPUT.PUT_LINE('nodatafound');
      END IF;
      CLOSE EMP_CURSOR;
    END;