这个我一时忘记是从哪里获取来的,只是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);