• PL/SQL控制语句(一、分支控制语句)


    1. IF-THEN-ELSE语句

    IF语句共提供了如下3种类型的条件控制语句:

      IF语句:包含IF-THEN语句和IF-THEN-ELSE语句,仅允许单组选择,即如果条件成立,则执行语句块1,或者如果条件不成立,则执行语句块2。

      ELSIF语句:如果IF条件不成立时,允许包含多组选择,比如说如果条件1不成立,则判断ELSIF中的条件并执行代码,由于是多组选择,因此可以包含多个ELSIF语句。

      嵌套的IF语句:允许包含多组选择,与ELSIF非常相似。

     注意:ELSIF语句不同于ELSEIF,它少了一个字符E,不要与其他语句中的ELSEIF混肴。

    最简单的IF语句的语法如下所示:

      IF confition

      THEN

      ...  顺序执行语句   ...

      END IF;

    condition返回逻辑运算符的常量、变量或表达式,如果condition条件返回值True将执行THEN后面的顺序执行语句;END IF用来结束分支控制,如果不满足IF语句的条件,则不执行任何代码。

      注意:必须使用END IF作为IF语句块的终结语句。

      IF-THEN-ELSE语法:

      IF condition

      THEN

      ...条件为True时的顺序执行语句

      ELSE

      ...条件为False/NULL的顺序执行语句

      END IF;

    例子:向人士管理系统中插入员工数据,使用IF THEN ELSE进行插入或者更新操作。

    DECLARE

      v_count  NUMBER(10):=0;   --定义计数器变量

      v_empno  NUMBER(4):=7888;   --定义员工编号

    BEGIN

      SELECT COUNT(1)    --首先查询指定的员工编号是否存在

      INTO v_count

      FROM emp

      WHERE empno = v_empno;

      --使用IF语句判断,如果员工编号不存在,结果为0

      IF v_count = 0

      THEN

      --则执行INSERT语句,插入新的员工记录

      INSERT INTO emp

        (empno,ename,job,hiredate,sal,deptno)

        VALUES(v_empno,'张三','经理','TRUNC(SYSDATE)','1000','20');

      ELSE    --否则,执行UPDATE语句

      UPDATE emp

      SET ename = '张三',

        job = '经理',

        hiredate = TRUNC(SYSDATE),

        sal = 1000,

        deptno  = 20

      WHERE empno = v_empno;

      END IF;

      --向数据库提交更改

      COMMIT;

    EXCEPTION

      WHEN OTHERS

      THEN

        DBMS_OUTPUT.put_line(SQLERRM);     --输出异常信息

    END;

    /

    示例中的v_count=0的返回值要么是True,要么是False,但是在一些场合,表达式运算的结果可能返回NULL值,NULL值被当作False条件结果,因此ELSE语句依然得以执行。

      

    2.IF-THEN-ELSIF语句

    IF-THEN-ELSIF,这种语句允许进行多分路分支选择。IF-THEN-ELSIF中可以包含多个ELSIF条件,声明语法如下:

      IF condition-1

      THEN

       statements-1

      ELSIF condition-N

      THEN

        statements - N

      [ELSE else_statements]

      END IF;

      

      当开始的IF条件condition1为False 或NULL时,则ELSIF将测试另一个条件,在一个IF中可以包含多条ELSIF语句,每一条都判断一个条件。只有当条件为True时,在ELSIF中包含的语句才会执行,同时会忽略掉其他的ELSIF语句,进入END IF。如果所有的条件都是False或NULL,执行控制将跳转到ELSE语句部分。

    注意:在IF后面总是具有END IF, END IF之间具有一个空格,ELSIF中间没有空格,写成ELSEIF是非法的,所有的ELSIF语句之间是互相排斥的,条件从第一个到最后一个依序进行计算。

    3.CASE语句

      CASE语句与许多高级语言中的SWITCH相似,用来一次性检查多个条件的值。

      CASE语句由一个选择器和一系列的WHEN语句块组成,选择器紧随在CASE语句的后面,如果没有提供选择器,PL/SQL将添加一个布尔值True作为选择器,选择器可以是任何的PL/SQL数据类型,但不可以是BLOB或BFILE及复合类型,比如记录、集合和用户自定义类型等。

      

      PL/SQL提供了如下两种类型的CASE语句:

        简单的CASE语句:简单CASE语句的选择器是一个变量或一个返回有效数据类型的函数,选择器不可以是布尔类型。

        搜索CASE语句:搜索CASE语句的选择器是布尔类型的变量或返回布尔类型的函数,默认的选择器为True,当搜索一个True表达式时,可以省略掉选择器的定义。

      与IF语句类似,CASE语句也有ELSE语句,ELSE语句的作用类似于在IF语句中的应用。ELSE语句是可选的,如果省略了ELSE语句,PL/SQL会隐含增加一个ELSE语句:

        ELSE RAISE CASE_NOT_FOUND;

    注意:即使省略了ELSE语句,PL/SQL也会执行ELSE语句,程序执行时也会收到一个异常。

      简单CASE语句声明语法如下:

      CASE selector_variable

      WHEN criterion1 TH EN criterion1_statements;

      WHEN criterion2 THEN criterion2_statements;

      WHEN criterion(n+1) THEN criterion(n+1)_statements;

      ELSE

      block_statements;

      END CASE;

      紧随在CASE关键字后面的是选择器变量或函数,可以返回任何PL/SQL数据类型,但不能是布尔类型。

      搜索CASE语句

      简单的CASE语句又称检测式CASE语句,每一个WHEN子句都将一个值和CASE语句中要检测的值,即选择器进行比较。搜索CASE语句仅能用于布尔类型,在搜索CASE语句中,选择器被隐含设置为True,当然也可以显示地使用False条件。在搜索CASE语句中,每一个WHEN子句都包含一个布尔表达式,如果检测表达式的值为True,那么相应的子句将会被执行 。

    注意:使用搜索类型的CASE表达式只能使用布尔类型的表达式。

    声明语法如下:

      CASE[{True | False}]

        WHEN  [criterion1  |  expression1]  THEN

        criterion1_statements;

        WHEN   [criterion1  |  expression1 ]THEN

        criterion2_statements;

        WHEN [ criterion(n+1)  |  expression(n+1) ] THEN

        criterion(n+1)_statements;

        ELSE

        block_statements;

        END CASE;

      CASE后面的True和False是可选的,默认值为True;  WHEN子句中包含条件或表达式,同样包含了ELSE子句。

      

  • 相关阅读:
    PyCharm 3.4注册码
    监控Oracle索引是否被启用
    Oracle execute plan 原理分析与实例分享(转)
    6 个重构方法可帮你提升代码质量(转载)
    跟我一起学Oracle 11g【2】----用户管理(转载)
    notecore设置linux/Unix系统文件权限
    Unicode特殊字符的坑
    net多线程
    走过的HttpClient坑
    Postgre备份还原
  • 原文地址:https://www.cnblogs.com/harriets-zhang/p/10796192.html
Copyright © 2020-2023  润新知