当前位置: 代码迷 >> Oracle管理 >> 请问一个关于游标,循环的存储过程
  详细解决方案

请问一个关于游标,循环的存储过程

热度:188   发布时间:2016-04-24 04:11:28.0
请教一个关于游标,循环的存储过程
declare
  i integer; --定义变量
begin
  i := 1;
  loop
    /* 插入数据 */
  
    insert into t_yx_bak values('1','2');
  
    /* 参数递增 */
    i := i + 1;
    /* 停止条件 */
    if mod(i, 10000) = 0 
       then
      commit;
    end if;
    exit when i=8000000;
  end loop;
  commit;
end;
这个执行完以后永远不会停止,数据也不会变多,结果是一样的,但不会停止执行,哪位大神遇到过这种情况
------解决思路----------------------
引用:
Integer为32位,其范围为 -2^15 到 2^15-1 之间
所以最大值是  2^15-1=32767,永远也不会到达8000000这个数的
类型改为number试试

INTEGER
INT
A whole number in the range of (-2**31) to (2**31)-1.
------解决思路----------------------
SQL> ed
已写入 file afiedt.buf

  1  declare
  2    i integer; --定义变量
  3  begin
  4    i :=8000000-10;
  5    loop
  6      /* 插入数据 */
  7       dbms_output.put_line(i);
  8      /* 参数递增 */
  9      i := i + 1;
 10      /* 停止条件 */
 11      if mod(i, 10000) = 0
 12         then
 13        dbms_output.put_line('commit');
 14      end if;
 15      exit when i=8000000;
 16    end loop;
 17    commit;
 18* end;
SQL> /
7999990
7999991
7999992
7999993
7999994
7999995
7999996
7999997
7999998
7999999
commit

PL/SQL 过程已成功完成。

SQL>

测试了下没有你说的现象啊
  相关解决方案