简化过后是这个存储过程,意思是里面循环执行,在pl/sql里怎么执行这个存储过程呢?
这个存储过程不对的话,该怎么修改呢,先谢过啦,分不多~
CREATE OR REPLACE PROCEDURE p_dwkhb_tj IS 
Declare   
     v_czl number(5,4);
     v_counter int := 9;      
 begin
 while v_counter >0 loop
  v_counter := v_counter - 1;
  select shzh_czl into v_czl from (
    select sum0/Sj_sum as shzh_czl
    from ( select   Sj_sum ,sum0 from table_q);
    insert into table_test('1','1');
EXCEPTION WHEN OTHERS THEN 
    insert into table_test('0','0');
END LOOP; 
END;

解决方案 »

  1.   

    exec p_dwkhb_tj;
    或者
    begin
    p_dwkhb_tj;
    end;
    来执行存储过程。
    如果你的过程编译后报错 你可以通过show errors来看错误。
    然后ed进行编辑
      

  2.   

    exec p_dwkhb_tj;这条语句执行后显示的是“无效的sql语句”begin
    p_dwkhb_tj;
    end;执行后也报错,似乎不可以哦
    show errors没用过,不知道怎么搞~,还望多多指教,。。
      

  3.   

    你用的pl/sql developer吧 不是sqlplus哦
    那就更好办了 下面就错误信息啊  在procedure里找到你的过程 edit就可以修改了
      

  4.   

    EXCEPTION WHEN OTHERS THEN  
      insert into table_test('0','0');
    导致的 
    在其外面再包层 begin  end
      

  5.   

    简单示例
    Declare
      v_czl     number(5, 4);
      v_counter int := 9;
    begin
      while v_counter > 0 loop
        v_counter := v_counter - 1;
        begin
          dbms_output.put_line(v_counter);
        EXCEPTION
          WHEN OTHERS THEN
            dbms_output.put_line('0');
        end;
      end loop;
    END;
      

  6.   


    --改了几个 有些地方有点多余CREATE OR REPLACE PROCEDURE p_dwkhb_tj 
    IS  
    v_czl number(5,4);
      v_counter int := 9;   
     begin
     while v_counter >0 loop
      v_counter := v_counter - 1;
     select (sum0/Sj_sum) into v_czl from table_q;
    insert into table_test values('1','1');
    END LOOP;  
    EXCEPTION WHEN OTHERS THEN  
      insert into table_test values('0','0');
    commit;
    END;--sql窗口
    begin
    p_dwkhb_tj;
    end;
    --命令窗口
    exec p_dwkhb_tj;
      

  7.   

    6楼的这样  一旦出错   整个loop就跳出了吧
    楼主好像是每次loop都要捕捉异常
    个人觉得还是包一层
      

  8.   

    没错,要每次执行都捕捉异常。
    其实,这个存储过程的select语句,循环执行,分别选出一个值,
    比如六次就是sum1,sum2...sum6,如果sum0 ~ sum6选出时任意一个异常,就置‘0’,否则记录此值。
    然后插入一条记录即insert into TABLE_NAME values('sum1',...'sum6'),
    不知该如何修改这段代码呢?
      

  9.   

    呵呵  那就如6楼写的 定义6个变量  
    最后一次插入
    其实我觉得楼主没必要做6次捕获异常  select不就是会出现查不到数据的异常么
    用个 nvl(sum(),0)
    是这个意思么
      

  10.   


    sum0 ~ sum6 是两个数相除的结果,
    所以每个值都有可能出现除数为0的情况,即出现异常,
    所以每次插入一条记录时,必须考虑每个字段是否有异常~
    想了想,还是必须定义六个变量。
      

  11.   

    执行存储过程直接用exec,不过要在sqlplus下执行啊,你执行exec报错,你是不是没在命令行下执行哦。