迴圈的種類:
a. 基本迴圈:
LOOP /* statements */ END LOOP;
b. WHILE 迴圈:
WHILE i > j LOOP /* statements */ END LOOP;
c. FOR 迴圈:
用數字指定執行迴圈數:
FOR i IN 1..10 LOOP DBMS_OUTPUT.put_line('i = ' || i); END LOOP;
可以倒著跑:
FOR i IN REVERSE 1..10 LOOP DBMS_OUTPUT.put_line('i = ' || i); END LOOP;
跟著 CURSOR 的應用:
FOR rec IN (SELECT col1, col2 FROM table_name) LOOP DBMS_OUTPUT.put_line('rec.col1 = ' || rec.col1 || 'rec.col2 = ' || rec.col2); END LOOP; FOR rec IN cursor_name LOOP DBMS_OUTPUT.put_line('rec.col1 = ' || rec.col1 || 'rec.col2 = ' || rec.col2); END LOOP; FOR rec IN cursor_name(param1, param2...) LOOP DBMS_OUTPUT.put_line('rec.col1 = ' || rec.col1 || 'rec.col2 = ' || rec.col2); END LOOP;
迴圈的控制: 標籤(LABEL)與跳出(EXIT)的應用
可以用標籤 (LABEL) 來為迴圈命名:
<<label_name>> FOR i IN 1..9 LOOP DBMS_OUTPUT.put_line(i); END LOOP label_name;
再來看看跳出(EXIT)的使用:
EXIT; EXIT WHEN i > j; EXIT label_name; EXIT label_name WHEN i > j;
把它們湊在一起, 來完成迴圏的控制吧:
BEGIN <<i_loop>> FOR i IN 1..9 LOOP <<j_loop>> FOR j IN 1..9 LOOP DBMS_OUTPUT.put(j); END LOOP j_loop; DBMS_OUTPUT.new_line; END LOOP i_loop; /** 輸出結果為: 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 */ <<i_loop>> FOR i IN 1..9 LOOP <<j_loop>> FOR j IN 1..9 LOOP DBMS_OUTPUT.put(j); EXIT j_loop WHEN j = i; END LOOP j_loop; DBMS_OUTPUT.new_line; END LOOP i_loop; /** 輸出結果為: 1 12 123 1234 12345 123456 1234567 12345678 123456789 */ END;
在每一種程式語言中,迴圈的寫法與控制,就像變數宣告、運算子、判斷式等等一樣,是基礎的馬步。可是迴圈的控制與寫作,會多了那麼點效能的議題。多重迴圏更考驗著程式人員邏輯與思路的清晰。多用點心思,可以減少某些跑起來很囧的迴圈的出現,就更不用說比囧還囧的無窮迴圈了…
謎之音:比囧還囧,那不就是莔嘞?(笑)
0 回應 :
張貼留言
讓阿布知道你對這篇文章的想法吧!