日期:2014-05-16  浏览次数:20823 次

用游标异常的问题 希望有人解决
oracle scott表中的 emp表 我想通过deptno 来 显示出来 emp表中的 ename 和 sal 异常就是输入 deptno 如果表里面没有就抛异常

代码如下 求指点
  declare 
       cursor emp_cursor (dno number) is 
       select ename,sal from emp where deptno=dno;
       v_ename varchar(10);
       v_sal number(10);
       begin
          open emp_cursor(99);
          loop
            fetch emp_cursor into v_ename,v_sal;
            exit when emp_cursor%notfound;
           dbms_output.put_line(v_ename||v_sal);
           end loop;
           close emp_cursor;
           exception
          when no_data_found then dbms_output.put_line('nodatafound');
           end;

完全就没有抛出异常 ,希望能指条路 ,
最好直接把代码写出来 
异常

------解决方案--------------------
游标没有数据返回不是异常,不会触发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;