当前位置: 代码迷 >> SQL >> PL/SQL条件统制(二)
  详细解决方案

PL/SQL条件统制(二)

热度:112   发布时间:2016-05-05 14:21:22.0
PL/SQL条件控制(二)

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;

?

  相关解决方案