一 簡單循環
1 語法:
LOOP
要執行的語句;
EXIT WHEN <條件語句> --條件滿足,退出循環語句
END LOOP;
2 例子:
DECLARE
int NUMBER(2) :=0;
BEGIN
LOOP
int := int + 1;
DBMS_OUTPUT.PUT_LINE('int 的當前值為:'||int);
EXIT WHEN int =10;
END LOOP;
END;
二 WHILE循環
1 語法:
WHILE <布爾表達式> LOOP
要執行的語句;
END LOOP;
2 例子:
DECLARE
x NUMBER :=1;
BEGIN
WHILE x<=10 LOOP
DBMS_OUTPUT.PUT_LINE('X的當前值為:'||x);
x:= x+1;
END LOOP;
END;
三 數字式循環
1 語法:
[<<循環標簽>>]
FOR 循環計數器 IN [ REVERSE ] 下限 .. 上限 LOOP
要執行的語句;
END LOOP [循環標簽];
每循環一次,循環變量自動加1;使用關鍵字REVERSE,循環變量自動減1。跟在IN REVERSE 后面的數字必須是從小到大的順序,而且必須是整數,不能是變量或表達式。可以使用EXIT退出循環。
2 例子:
BEGIN
FOR int in 1..10 LOOP
DBMS_OUTPUT.PUT_LINE('int 的當前值為: '||int);
END LOOP;
END;
CREATE TABLE temp_table(num_col NUMBER);
DECLARE
V_counter NUMBER := 10;
BEGIN
INSERT INTO temp_table(num_col) VALUES (v_counter );
FOR v_counter IN 20 .. 25 LOOP
INSERT INTO temp_table (num_col ) VALUES ( v_counter );
END LOOP;
INSERT INTO temp_table(num_col) VALUES (v_counter );
FOR v_counter IN REVERSE 20 .. 25 LOOP
INSERT INTO temp_table (num_col ) VALUES ( v_counter );
END LOOP;
END ;
DROP TABLE temp_table;
DECLARE
TYPE jobids_varray IS VARRAY(12) OF VARCHAR2(10); --定義一個VARRAY數據類型
v_jobids JOBIDS_VARRAY; --聲明一個具有JOBIDS_VARRAY數據類型的變量
v_howmany NUMBER; --聲明一個變量來保存雇員的數量
BEGIN
--用某些job_id值初始化數組
v_jobids := jobids_varray('FI_ACCOUNT', 'FI_MGR', 'ST_CLERK', 'ST_MAN');
--用FOR...LOOP...END LOOP循環使用每個數組成員的值
FOR i IN v_jobids.FIRST..v_jobids.LAST LOOP
--針對數組中的每個崗位,決定該崗位的雇員的數量
SELECT count(*) INTO v_howmany FROM employees WHERE job_id = v_jobids(i);
DBMS_OUTPUT.PUT_LINE ( '崗位'||v_jobids(i)||
'總共有'|| TO_CHAR(v_howmany) || '個雇員');
END LOOP;
END;
在While循環中嵌套loop循環
/*求100至110之間的素數*/
DECLARE
v_m NUMBER := 101;
v_i NUMBER;
v_n NUMBER := 0;
BEGIN
WHILE v_m < 110 LOOP
v_i := 2;
LOOP
IF mod(v_m, v_i) = 0 THEN
v_i := 0;
EXIT;
END IF;
v_i := v_i + 1;
EXIT WHEN v_i > v_m - 1;
END LOOP;
IF v_i > 0 THEN
v_n := v_n + 1;
DBMS_OUTPUT.PUT_LINE('第'|| v_n || '個素數是' || v_m);
END IF;
v_m := v_m + 2;
END LOOP;
END;