关于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;

浙公网安备 33010602011771号