begin
     open c_SearchBxdmx;
     fetch c_SearchBxdmx into v_Searchbxdmx;
     WHILE c_SearchBxdmx%FOUND LOOP
          c_SearchBxdmx.jcje:=1000.00;
          cc:=cc+1;
--here!!!
     fetch c_SearchBxdmx into v_Searchbxdmx;     END LOOP; 
     jg:=cc;     
end pro_lx;

解决方案 »

  1.   

    错误仍在:光标停在jcje前。
    c_SearchBxdmx.jcje:=1000.00;
      

  2.   

    begin
         open c_SearchBxdmx;
         fetch c_SearchBxdmx into v_Searchbxdmx;
         WHILE c_SearchBxdmx%FOUND LOOP
    --HERE  
            c_SearchBxdmx.jcje:=1000.00;
            ~~~~~~~~~~~~~~~~~~~
    --你是想这样吧:
           v_Searchbxdmx.jcje:=1000.00;
              cc:=cc+1;
    --here!!!
         fetch c_SearchBxdmx into v_Searchbxdmx;     END LOOP; 
         jg:=cc;     
    end pro_lx;
      

  3.   

    好几个问题:
    1、cursor c_SearchBxdmx is select * from table_data_bxdmx where bxdhm=bxdhm;
    变量名和列名一样,oracle会默认为是列名,所以这句语句把表中的所有数据都选出来了
    2、cursor定义没有用for update,所以c_SearchBxdmx.jcje:=1000.00;是非法的
    3、在循环中没有fetch其实一句sql能解决的,用过程简直是毫无必要
    update table_data_bxdmx
       set jcje = 1000
     where bxdhm=p_bxdhm;
    要获得更新的行数,用sql%rowcount就可以了
      

  4.   

    是这样写吗?
    我要用存储过程修改很多项数据,而且是远程数据库,用存储过程会好一些。
    cursor c_SearchBxdmx is select * from table_data_bxdmx where bxdhm=bxdhm for update;