oracle 测试for 循环:
1.经常会有要写for 循环的场景:
for 循环名 in (循环体) loop end loop;
2.问题背景:
for 循环体内的执行顺序,究竟是查询了结果集,再去跑循环,还是每一次都会重新获取结果集;
3.问题:
我对循环体内的表进行增删改,会不会影响到我的循环结果;
4.测试:
1)建表+插入数据:
create table TMP_TEST_ZLR
(
orderlineno varchar2(100),
descr varchar2(100))insert into TMP_TEST_ZLR(orderlineno,descr) values('1','第一行数据');
insert into TMP_TEST_ZLR(orderlineno,descr) values('2','第二行数据');
insert into TMP_TEST_ZLR(orderlineno,descr) values('3','第三行数据');
insert into TMP_TEST_ZLR(orderlineno,descr) values('4','第四行数据');
insert into TMP_TEST_ZLR(orderlineno,descr) values('5','第五行数据');
insert into TMP_TEST_ZLR(orderlineno,descr) values('6','第六行数据');
insert into TMP_TEST_ZLR(orderlineno,descr) values('7','第七行数据');
insert into TMP_TEST_ZLR(orderlineno,descr) values('8','第八行数据');
表的数据结果:
2)写循环:
declare r_int int;beginr_int := 1;for r in (select * from TMP_TEST_ZLR a order by a.orderlineno) loopif r_int = r.orderlineno thendbms_output.put_line(r.descr);end if;delete from TMP_TEST_ZLR a where a.orderlineno = '2';commit;r_int := r_int+1;end loop;end ;
解释:
–1.我在跑循环的过程中,删了这个某一行测试表的数据,想要看看是否会干扰for 循环的执行
1)如果是以先查出结果集来跑循环的,那应该会打印出我的第二行数据;
2)如果不是,那就只会有7行数据;
3)最终结果:
打印:
数据表结果:
5.结论
1.for 循环体内的执行顺序:先全查,得到了结果集,再去跑循环,循环体内的表进行增删改,循环体的结果集数据不变;