cur_sh,cur_num_level游标在定义的时候就自动打开了,因此在begin之后就不要用open语句再打开,你把
open cur_sh;
open cur_num_level;
两个语句删掉试一试。

解决方案 »

  1.   

    open cur_num_level;
    打开多次只关闭一次

    if cur_num_level%notfound then
               if var_sh.jxhbz=0 then
                     insert into rn_number_level (exch_code,no_level,level_memo,no_cost,write_time) 
                                          values (var_fjh,0,'普通号码',0,var_sh.sfrq);                               
                     else
                         insert into rn_number_level (exch_code,no_level,level_memo,no_cost,write_time) 
                                      values (var_fjh,1,'吉祥号码',var_sh.jxhbz,var_sh.sfrq);                            
               end if;      
          end if;
    后加 close cur_num_level;
      

  2.   

    create or replace procedure trans_num_lev        
    as
       --var_sh t_shb%rowtype;
       var_fjh   varchar2(3);
       v_number varchar2(9);
       --v_exch varchar2(4);
       --v_level number(10);
       cursor cur_sh is 
       select * from t_shb;
    begin
     --  open cur_num_level;
    for v_sh in cur_sh loop 
    DBMS_OUTPUT.PUT_LINE(v_sh.dhhm);
    v_number:=v_sh.dhhm;
    select  fjh into var_fjh from t_jhjjhb where v_number between qsdhhm and zzdhhm;
    begin
    select 1 into num from rn_number_level where exch_code=var_fjh and no_level=0 or no_level=1; 
    exception
    when others then
     begin
     if v_sh.jxhbz=0 then
     insert into rn_number_level (exch_code,no_level,level_memo,no_cost,write_time) 
                                          values (v_fjh,0,'普通号码',0,v_sh.sfrq);                               
     else
     insert into rn_number_level (exch_code,no_level,level_memo,no_cost,write_time) 
                                      values (v_fjh,1,'吉祥号码',v_sh.jxhbz,v_sh.sfrq);                            
     end if;      
     end;  
    end loop;   
    commit;  
    end;
    /