Oracle的for迴圈執行順序詳解
阿新 • • 發佈:2020-12-18
技術標籤:oracle
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; begin r_int := 1; for r in (select * from TMP_TEST_ZLR a order by a.orderlineno) loop if r_int = r.orderlineno then dbms_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 迴圈體內的執行順序:先全查,得到了結果集,再去跑迴圈,迴圈體內的表進行增刪改,迴圈體的結果集資料不變;