1.IF条件语句
???? 在PL/SQL语句块中,IF语句可以包含IF、ELSIF、ELSE、THEN、END IF等关键字,其完整的语法格式为:
???? IF condition1 THEN
????????? …………;
??? [ ELSIF condition2 THEN
????????? …………;]
???? [ELSE
????????? …………;]
???? END IF;
???? 其中,condition<n>是条件表达式,返回TRUE或者FALSE; 省略号是当符合某条件时要执行的语句。ELSIF子句可以有也可以没有,可以时一条也可以是多条。
??? 示例一:简单条件判断
DECLARE v_score BINARY_INTEGER:=99;BEGIN IF v_score>=90 THEN DBMS_OUTPUT.PUT_LINE('优秀'); END IF;END;
?
??? 示例二:二重条件分支
DECLARE v_score BINARY_INTEGER:=99;BEGIN IF v_score>=90 THEN DBMS_OUTPUT.PUT_LINE('优秀'); ELSE DBMS_OUTPUT.PUT_LINE('一般般啦'); END IF;END;
?
?? 示例三:多重条件分支
DECLARE v_score BINARY_INTEGER:=99;BEGIN IF v_score>=90 THEN DBMS_OUTPUT.PUT_LINE('优秀'); ELSIF v_score>=80 THEN DBMS_OUTPUT.PUT_LINE('良好'); ELSIF v_score>=60 THEN DBMS_OUTPUT.PUT_LINE('及格'); ELSE DBMS_OUTPUT.PUT_LINE('大笨蛋'); END IF;END;
?2.CASE语句
??? 在ORACLE9i之前,执行多重条件分支是使用IF完成的,从9i开始,不但可以是用IF,也可以使用CASE语句完成。从代码结构上来讲,CASE语句比IF语句具有更好的阅读性,更加简洁。所以,建议使用CASE。
???? ORACLE中的CASE语句分为两种,一种是在CASE语句中使用单一选择符进行等值比较;一种是使用多种条件进行非等值比较。
??? (1)在语句是使用单一选择符进行等值比较
????????? CASE selector
???????????????????? WHEN exp1 THEN statement1;
?????????????????????WHEN exp2 THEN statement2;
???????????????????? ...
???????????????????? WHEN expN THEN statementN;
???????????????????? [ELSE default_statement;]
???????? END CASE;
???????? 示例:
DECLARE v_grade VARCHAR2(4)='良好';BEGIN CASE v_grade WHEN '优秀' THEN DBMS_OUTPUT_PUT_LINE('大于等于90分'); WHEN '良好' THEN DBMS_OUTPUT_PUT_LINE('大于等于80分,小于90分'); WHEN '及格' THEN DBMS_OUTPUT_PUT_LINE('大于等于60分,小于80'); WHEN '不及格' THEN DBMS_OUTPUT_PUT_LINE('小于60分'); ELSE DBMS_OUTPUT_PUT_LINE('此等级不对应任何分数); END CASE;END;
??? (2)在CASE语句中使用多种条件比较
??????? CASE
???????????? WHEN condition1 THEN statements1;
???????????? WHEN condition2 THEN statements2;
???????????? ...
???????????? WHEN conditionN THEN statementsN;
???????????? [ELSE default_statements;]
?????? END CASE;
???? 示例:
DECLARE v_score BINARY_INTEGER:=61;BEGIN CASE WHEN v_score>=90 THEN DBMS_OUTPUT_PUT_LINE('优秀'); WHEN v_score>=80 THEN DBMS_OUTPUT_PUT_LINE('良好'); WHEN v_score>=60 THEN DBMS_OUTPUT_PUT_LINE('及格'); ELSE DBMS_OUTPUT_PUT_LINE('不及格'); END CASE;END;
?3:循环语句:主要包括LOOP循环、WHILE循环和FOR循环
??? (1)LOOP循环
??????????? 格式:
??????????????LOOP
???????????????????statesments;
?????????????????? EXIT [WHEN condition];
??????????????END LOOP;?????????
???????? 示例:
DECLARE i INT:=1;BEGIN LOOP INSERT INTO temp VALUES(i); EXIT WHEN i=10; i:=i+1; END LOOP;END;
?
?(2)WHILE循环
???????? 格式:
???????? WHILE condition
???????????? ?LOOP
??????????????? statement1;
??????????????? statement2;
??????????????? ?...
????????????? END LOOP;
???? 示例:
DECLARE i INT:=1;BEGIN WHILE i<=10 LOOP INSERT INTO temp VALUES(i); i:=i+1; END LOOP;END;
?(3)FOR循环
???? 格式:
????? FOR counter IN [REVERSE]?lower_bound..upper_bound
????? LOOP
?????????? statement1;
?????????? statement2;
??????????? ...
??????END LOOP;
???? 示例:
BEGIN FOR i IN REVERSE 1..10 LOOP INSERT INTO temp VALUES(i); END LOOP;
?