Oracle中有三种循环(For、While、Loop):
成都网络公司-成都网站建设公司成都创新互联10余年经验成就非凡,专业从事网站设计、做网站,成都网页设计,成都网页制作,软文营销,一元广告等。10余年来已成功提供全面的成都网站建设方案,打造行业特色的成都网站建设案例,建站热线:18982081108,我们期待您的来电!
1、loop循环:
create or replace procedure pro_test_loop is
i number;
begin
i:=0;
loop
i:=i+1;
dbms_output.put_line(i);
if i5 then
exit;
end if;
end loop;
end pro_test_loop;
2、while循环:
create or replace procedure pro_test_loop is
i number;
begin
i:=0;
while i5 loop
i:=i+1;
dbms_output.put_line(i);
end loop;
end pro_test_loop;
3、for循环1:
create or replace procedure pro_test_for is
i number;
begin
i:=0;
for i in 1..5 loop
dbms_output.put_line(i);
end loop;
end pro_test_for;
4、for循环2:
create or replace procedure pro_test_cursor is
userRow t_user%rowtype;
cursor userRows is
select * from t_user;
begin
for userRow in userRows loop
dbms_output.put_line(userRow.Id||','||userRow.Name||','||userRows%rowcount);
end loop;
end pro_test_cursor;
几千行对 oracle 来说不是问题,可以一次提交
如果一定要这么做,有两种方式:
一,用游标打开,一行拼一个insert 语句,并计数;满100后提交
二,分页查询,每页100行 ,然后提交
我觉得:能一次提交的尽量不要分开提交,如果提交到一部分时候,出现问题了,提交的不能回滚了。增加了业务逻辑的复杂性。
不明白所谓的分批。如果是数据量太大,可以考虑写procedure,通过for 循环,将资料一部分一部分存放到本地,然后在再本地表里查询。这个方法当然是对于少量表来说,比较方便快捷。如果是大量的表,可以考虑使用replication 或stream
一、GOTO循环用法
DECLARE
x number;
BEGIN
x := 9;
repeat_loop --循环点
x := x - 1;
dbms_output.put_line(x);
IF x 0 THEN
GOTO repeat_loop; --当x的值0时,就goto到repeat_loop
END IF;
END;
/*以上语句翻译如下:
declare 定义变量;
begin...end语句块
x 变量赋值
repeat_loop 设置循环点
循环内容
x 变量递减
按行打印 x
IF...END IF语句块
IF...(条件) THEN :满足IF条件 则
GOTO语句 前往循环点
*/
二、FOR循环用法
DECLARE
x number;
BEGIN
FOR i in 2..10 LOOP
dbms_output.put_line(i);
END LOOP;
END;
--最简单的循环?
/*
declare 定义变量
begin...end语句块
for...loop...end loop; 语句
*/
三、WHILE循环用法
DECLARE
x number;
BEGIN
x :=5;
WHILE x 1 LOOP
x := x - 1;
dbms_output.put_line('循环内'||x);
END LOOP;
dbms_output.put_line('循环外'||x);
END;
/*
declare 定义变量
begin...end 语句块
while...loop...end loop; 语句
*/
四、LOOP循环用法
DECLARE
x number;
BEGIN
x :=0;
LOOP
x := x + 1;
EXIT WHEN x 9; --这里有个";"号
dbms_output.put_line('内'||x);
END LOOP;
dbms_output.put_line('外'||x);
END;
/*
declare 定义变量
begin...end
x 变量赋值
loop...end loop语句
exit when ...(条件) ;
*/
要使用pl/sql块
采用
loop
语句
exit when 退出循环的条件
end loop
begin
v_cnt number:=0;
loop
delete from a where rownum=100000;
v_cnt:=SQL%ROWCOUNT;
commit;
exit when v_cnt=0;
end loop;
end;
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款