Oracle:IF語句 Loop循環 Cursor的用法(一)

這個我一時忘記是從哪裏獲取來的,只是IF..Else與Loop的結合使用在PL-SQL中運用得很多,發揮的作用也是不言而喻的.


那就從最基本的開始吧,我這裏也只能給出Example代碼,權當複習一下,與大家分享

1.IF語句

基本的語句:

格式: IF 條件 THEN
         執行.
END IF

Example:


set serveroutput on

DECLARE
x NUMBER(3) := 9;
BEGIN
  IF x < 10 THEN
    dbms_output.put_line('X is less than 10');
  END IF;
END;
/

http://www.dezai.cn/blog/article.asp?id=357


2.IF - ELSE 語句

格式:
IF <條件> THEN
  <執行語句>
ELSE
  <執行語句>
END IF;

Example:


set serveroutput on
DECLARE
x NUMBER(3) := 10;
BEGIN
  IF x < 10 THEN
    dbms_output.put_line('X is less than 10');
  ELSE
    dbms_output.put_line('X is not less than 10');
  END IF;
END;
/



3.IF - ELSIF - ELSE 語句
格式:
IF <執行的條件>THEN
<執行代碼>
ELSIF <執行的條件>THEN
<執行代碼>
ELSIF <執行的條件>THEN
<執行代碼>
ELSE
<執行代碼>
END IF;
Example:


set serveroutput on

DECLARE
x NUMBER(3) := 47;
BEGIN
  IF x < 10 THEN
    dbms_output.put_line('X 小於 10');
  ELSIF x = 10 THEN
    dbms_output.put_line('X 等於 10');
  ELSIF x < 100 THEN
    dbms_output.put_line('X 在 11 與 99 之間');
  ELSE
    dbms_output.put_line('X 大於 99');
  END IF;
END;
/







Basic Loop

測試表:
Create TABLE loop_test (test_col VARCHAR2(5));

1.Loop


格式:
LOOP
<執行代碼>
END LOOP;

Example:


DECLARE
i PLS_INTEGER := 1;
BEGIN
  LOOP
    i := i + 1;

    Insert INTO loop_test VALUES (i);

    IF i > 99 THEN
      EXIT;
    END IF;
  END LOOP;
  COMMIT;
END;
/

Select * FROM loop_test;



注:基本的LOOP循環的執行需要通過代碼去判斷何時開始與結束


2.While Loop

如果不能確定循環的基數時,採用WHILE LOOP.While LOOP是保證至少執行了一次循環


WHILE <執行的條件>
LOOP
<執行代碼>
END LOOP;



DECLARE
i PLS_INTEGER := 999;
BEGIN
  WHILE i < 1100 LOOP
    i := i + 1;

    Insert INTO loop_test VALUES (i);
  END LOOP;
  COMMIT;
END;
/

Select * FROM loop_test;





3.FOR Loop

格式:
-- incrementing
FOR <變量>IN <開始數> .. <結束數>
LOOP
<執行代碼>
END LOOP;

-- decrementing
FOR <變量>IN REVERSE <開始數> .. <結束數>
LOOP
<執行代碼>
END LOOP;

Example:


BEGIN
  FOR i IN 2000 .. 2100 LOOP
    Insert INTO loop_test VALUES (i);
  END LOOP;
  COMMIT;
END;
/

Select * FROM loop_test;

BEGIN
  FOR i IN REVERSE 3000 .. 3100 LOOP
    Insert INTO loop_test VALUES (i);
  END LOOP;
  COMMIT;
END;
/

Select * FROM loop_test;





Continue的用法

格式:

LOOP
<執行代碼>
  CONTINUE;
<執行代碼>
END LOOP;

Example:


set serveroutput on

Create or REPLACE PROCEDURE cont_test (val IN POSITIVEN) IS
BEGIN
  FOR i IN 1 .. 3 LOOP
    dbms_output.put_line('i=' || TO_CHAR(i));

    IF val = 2 THEN
      CONTINUE;
    END IF;

    dbms_output.put_line('Did not jump to the top of the loop');
  END LOOP;
END cont_test;
/

exec cont_test(3);
exec cont_test(2);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章