关于Oracle存储过程中的循环那些事

直接上代码,oracle循环都是使用游标来循环,例如:

--创建表
create table Text(
  id number(10),
  date_time date
)

delete from Text
--创建存储过程循环添加100数据
create or replace procedure sp_adddata
is
i int;
v_loop int;--循环次数
begin
  v_loop:=100;--计算需要循环次数
  i:=1;--为i赋值
  while  i<=v_loop  loop--循环退出条件
      insert into Text(id) values(i);
      i:=i+1;
  end  loop;--结束循环
end sp_adddata;

--使用游标修改时间,每次提交3条数据
create or replace procedure sp_update
is
type type_index_id is table of text.id%type;
v_index_id type_index_id;--取别名
j int;--循环变量
--将查询出来的数放到游标里
cursor temp is
  select id from Text where date_time is null;
begin
  j:=1;--为i赋值
 open temp;
  loop
    fetch temp bulk collect into v_index_id limit 3;
    --如果没有数据则退出
    exit when v_index_id.count = 0;
    --遍历数据
    forall i in v_index_id.first..v_index_id.last
      update Text set date_time=sysdate+j where id=v_index_id(i);
      commit;
       j:=j+1;--i依次加1
    end loop;
  close temp;
end sp_update;
--另一种方法,已下只写核心代码
create or replace procedure sp_update1
declare  cursor t1 is
      select id from text where date_time is null;
  begin
    for item1 in t1 loop
      dbms_output.put_line(item1.id);--输出
      end loop;
    end;
 end sp_update1;

  

原文地址:https://www.cnblogs.com/f12-liugang/p/14339801.html