在END LOOP前加一句
exit when C_MON_GRAPH%notfound;

解决方案 »

  1.   

    用for循环的话是不需要判断为空的 ,为空就不会进loop
      

  2.   

    不可能把,用了这么就for 也没判断过为空...  刚刚测试 为空时不会进loop的  直接end loop 了  不知道是你代码贴的不全还是其他什么原因?
      

  3.   

    贴全了    就是这个 我运行一只出错 加了那句话就ok了
    另外帮我看下
    IF V_VERSION IS NULL THEN
                 UPDATE MON_GRAPH SET VERSION = SYSDATE WHERE MON_GRAPH.ID = V_ID;
                 COMMIT;
    这句话运行时候程序就死了 这是为啥呢  刚开始写pl sql 老出错 汗、、
      

  4.   

     你直接执行那条update语句有问题么?   如果也是卡死的话 应该就是锁表了.
      

  5.   

     锁表 就解锁呗
    select object_name,machine,s.sid,s.serial#
    from v$locked_object l,dba_objects o ,v$session s
    where l.object_id = o.object_id and l.session_id=s.sid;ALTER SYSTEM KILL SESSION '538,20924' immediate;   sid,serial#
    能看懂吧    第一个是查出来锁表的进程,第二个是把那个进程干掉  干掉就行了
      

  6.   

    嗯,如果在FOR循环里加exit when C_MON_GRAPH%notfound;
    ,的却可以解决问题,但是容易导致锁表,不知道大家有没有更好的方法,求指导。
      

  7.   

    建议看看这种是不是可以呢???
    CREATE OR REPLACE PROCEDURE VER_COMPARE
     AS
        cursor mycur is --声明游标
        select * from a;--a为表名
        myrec a%rowtype; --声明与表字段相同的记录
    begin
      open mycur;--打开游标
      fetch mycur into myrec;
      while mycur%found loop
      dbms_output.put_line(myrec.col1||':'||myrec.col2);
      fetch mycur into myrec;
          --处理语句
      end loop;
      close mycur;
        EXCEPTION
              WHEN NO_DATA_FOUND THEN
              DBMS_OUTPUT.PUT_LINE('记录未找到');
              ROLLBACK;
              WHEN OTHERS THEN
              DBMS_OUTPUT.put_line('sqlerrm : ' ||sqlerrm);
              ROLLBACK;
     END;