循環語句:LOOP,WHILE和數字式循環


一 簡單循環

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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM