這個我一時忘記是從哪裏獲取來的,只是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);