我存储过程中有一段代码
loop
    fetch C_tracking_info into r_tracking_info;
           exit when C_tracking_info%notfound;
    begin
        update mytable set match_sign='Y' where record_id=r_tracking_info.record_id
    exception
        when others then
        raise_application_error(-20102,'记录匹配时出现错误!'||sqlerrm);
    end;
    commit;
end loop;
当执行完update和commit之后match_sign仍然是'N',怎么会update不成功呢?

解决方案 »

  1.   

    update mytable set match_sign='Y' where record_id=r_tracking_info.record_id 把你的r_tracking_info.record_id 打印出来看,可能问题出在r_tracking_info.record_id 上
      

  2.   

    没有抛出异常,r_tracking_info.record_id 的值也没有问题
      

  3.   

    loop 
        fetch C_tracking_info into r_tracking_info; 
              exit when C_tracking_info%notfound; 
        begin 
            dbms_output.putline(r_tracking_info.record_id);
            update mytable set match_sign='Y' where record_id=r_tracking_info.record_id 
        exception 
            when others then 
            raise_application_error(-20102,'记录匹配时出现错误!'||sqlerrm); 
        end; 
        commit; 
    end loop; 测试一下看有没有值传入.
      

  4.   

    把更新的纪录数打出来,用sql%rowcount
    loop 
        fetch C_tracking_info into r_tracking_info; 
              exit when C_tracking_info%notfound; 
        begin 
            update mytable set match_sign='Y' where record_id=r_tracking_info.record_id         dbms_output.putline(sql%rowcount); 
        exception 
            when others then 
            raise_application_error(-20102,'记录匹配时出现错误!'||sqlerrm); 
        end; 
        commit; 
    end loop; 
    如果sql%rowcount大于0
    那么可能是你在刚才的语句之后又有其他语句给更新回去了
      

  5.   

    dbms_output.putline(sql%rowcount); 输出到什么地方了,我没有看到,是在test窗口么?
      

  6.   

    晕,说了半天让你把r_tracking_info.record_id 打印出来,
    你竟然还没搞清楚再什么地方打印先
    set serveroutput on再用dbms_output.put_line();
      

  7.   

    声明一个变量-----〉   num3  NUMBER(30):=0;num3:=  sql%rowcount;
    单步跟踪看一下num3的值