广告
返回顶部
首页 > 资讯 > 数据库 >8.PL_SQL——PL_SQL中的条件控制语句
  • 129
分享到

8.PL_SQL——PL_SQL中的条件控制语句

2024-04-02 19:04:59 129人浏览 安东尼
摘要

    和大多数程序语言一样,PL/sql也有控制语句执行的结构,主要包括:       &nb

    和大多数程序语言一样,PL/sql也有控制语句执行的结构,主要包括:

             1、顺序结构:程序从上往下执行逐条语句,就是顺序结构;

             2、分支条件判断:分支条件判断主要是指的IF语句和CASE语句。

             3、循环语句:循环结构主要指的是REPEAT、LOOP和DO WHILE语句。

    本章节主要讲解条件判断语句的用法。

 

一、 IF 语句的用法

                IF 语句的基本格式为:             

                IF conditionTHEN

                                statements

                [ ELSIF conditionTHEN 

                -- 注意,这里的ELSIF中间没有E,ELSIF可以出现任意次

                statements;]

                [ ELSE

                 statements

                ]

                END IF;

 

          IF 后面的判断条件可以是布尔值,常量或表达式,判断结果为TRUE, FALSE或NULL,其中NULL这种情况是PL/SQL中特有的,其他编程语言并不常见;

        如果IF后的条件判断结果为TRUE,就执行THEN后面的语句;如果结果为FALSE和NULL,则不执行THEN后面的结果,而执行ELSE后面的语句。

 

下面看一个简单的例子:

 

SQL> edit

 

DECLARE
        v_myage number :=31;
BEGIN
        IF v_myage < 11
        THEN
           DBMS_OUTPUT.PUT_LINE(' I am a child');
        ELSE
           DBMS_OUTPUT.PUT_LINE( ' I am not achild! ');
                 -- 由于IF后的条件判断结果为FALSE,所以会执行这条语句
        END IF;
END;
/

 

SQL> /

I am not a child!
PL/SQL procedure successfullycompleted.

 

现在为上述例子多添加几条分支进行条件判断:

 

SQL> edit

BEGIN
        IF v_myage < 11 THEN
                DBMS_OUTPUT.PUT_LINE(' I am achild ');
                ELSIF v_myage < 20 THEN
                     DBMS_OUTPUT.PUT_LINE( 'Iam young ');
                ELSIF v_myage < 30 THEN
                     DBMS_OUTPUT.PUT_LINE( 'Iam in my twenties');
                ELSIF v_myage < 40 THEN
                     DBMS_OUTPUT.PUT_LINE( 'I am in mythirties');
                -- 由于31大于11,20,30,而小于40,所以执行这条语句
                ELSE
                     DBMS_OUTPUT.PUT_LINE( 'Iam always young ');
        END IF;
END;
/

 

SQL> /

I am in my thirties
PL/SQL procedure successfullycompleted.

 

如果IF条件判断的结果为NULL,则不会执行THEN后面的语句。

 

SQL> edit

DECLARE
        v_myage NUMBER;
BEGIN
       -- IF v_myage IS NULL
                --这里的结果时TRUE,因为判断是变量v_myage是否为NULL值,是就为TRUE,不是就为FALSE
        IF v_myage < 11 THEN
                -- 如果判断的条件为NULL值,则结果为NULL
        THEN
           DBMS_OUTPUT.PUT_LINE(' I am a child');
        ELSE
           DBMS_OUTPUT.PUT_LINE( ' I am not achild! ');
        END IF;
END;
/

 

SQL> /

I am not a child
PL/SQL procedure successfullycompleted.

 

IF 语句的条件还可以使用AND,OR,NOT等逻辑符进行组合。

 

IF条件判断语句中需要注意一些细节:

                a. IF 和 END IF必须配对出现;

                b. END IF中间有空格;

                c. ELSIF中间没有E

                d. 在END IF后面有分号“;

               

 

二、 CASE的用法

 

          CASE实际上IF语句的变体,当IF语句有大量类似的ELSIF判断条件时,就可以使用CASE来进行简化。CASE的用法可以分为两种,一种是CASE表达式,另一种是CASE语句。

 

(1)CASE表达式

                CASE 表达式的基本格式为:  

                                CASE selector

                                                WHENexpression1 THEN result1

                                                WHENexpression2 THEN result2

                                                ...

                                                WHENexpressionN THEN resultN

                                                [ELSEresultN+1]

                                END;

                其中selector选择值如果等于expression1的值,就执行result1,如果等于expression2,就执行result2...以此类推,如果没有expression的值能与之匹配的,就执行resultN+1。

               

                CASE表达式可以分为simple CASE和Searched CASE,其中simple CASE是指CASE后面会跟一个选择值,然后将条件表达式的结果和这个选择值进行比较,如下述这个例子:

 

SQL> edit                           

              

  SET VERIFY OFF
DECLARE
        v_grade CHAR(1) := UPPER('&grade');
        v_appraisal VARCHAR2(20);
BEGIN
        v_appraisal := CASE v_grade
                WHEN 'A' THEN 'excellent'
                WHEN 'B' THEN 'Very Good'
                WHEN 'c' THEN 'Good'
                ELSE 'No such grade'
             END;
-- 从CASE到END这一部分是simple CASE,其运行结果作为一个值赋给v_appraisal这个变量。                               
        DBMS_OUTPUT.PUT_LINE ('Grade: ' ||v_grade || ' Appraisal ' || v_appraisal);
END;

               

SQL>  /

Enter value for grade: a
Grade: A Appraisal Excellent
PL/SQL procedure successfullycompleted.

 

SQL> /

Enter value for grade: s
Grade: S Appraisal No suchgrade
PL/SQL procedure successfullycompleted.

 

         Searched CASE 中CASE后面没有选择值selector,而是直接判断关键字WHEN后面表达式的布尔值,如下面这个例子:

 

SQL> edit

DECLARE
        v_grade CHAR(1) := UPPER('&grade');
        v_appraisal VARCHAR2(20);
BEGIN
        v_appraisal := CASE
                -- 这里的CASE没有选择值了
                WHEN v_grade = 'A' THEN'Excellent'
                -- 直接在条件判断部分完成布尔值的返回
                WHEN v_grade IN ('B','C') THEN'Good'
                ELSE 'No such grade'
        END;
        DBMS_OUTPUT.PUT_LINE ('Grade: ' ||v_grade || ' Appraisal ' ||v_appraisal);
END;
/

 

SQL>/

Enter value for grade: A
Grade: A   Appraisal Excellent
PL/SQL procedure successfullycompleted.

 

SQL> /

Enter value for grade: o
Grade: O  Appraisal No such grade
PL/SQL procedure successfullycompleted.

 

SQL> /

Enter value for grade: b
Grade: B  Appraisal Good
PL/SQL procedure successfullycompleted.

 

(2)CASE语句

CASE语句就是一条条独立的语句,它不能将运行结果再赋值给其他的变量了。

如下面这个例子:

 

SQL> edit

DECLARE
        v_deptid NUMBER;
        v_deptname VARCHAR2(20);
        V_emps NUMBER;
        v_mngid NUMBER:= 108;
BEGIN
        CASE v_mngid
            WHEN 108 THEN
                SELECT department_id,department_name
                INTO v_deptid, v_deptname
                FROM departments
                WHERE manager_id = 108;
 
                SELECT count(*)
                INTO v_emps
                FROM employees
                WHERE department_id = v_deptid;
            --CASE语句不再作为一个整体将运行结果赋值给其他变量了                                     
            WHEN 200 THEN
                SELECT department_id,department_name
                INTO v_deptid, v_deptname
                FROM departments
                WHERE manager_id = 200;
 
                SELECT count(*)
                INTO v_emps
                FROM employees
                WHERE department_id = v_deptid;
           ELSE
                SELECT department_id,department_name
                INTO v_deptid, v_deptname
                FROM departments
                WHERE manager_id = 100;
 
                SELECT count(*)
                INTO v_emps
                FROM employees
                WHERE department_id = v_deptid;
        END CASE;
            --CASE语句中必须有END CASE,如果是CASE表达式就不需要END CASE。
 
        DBMS_OUTPUT.PUT_LINE('You are workingin the ' || v_deptname || ' department. There are ' ||v_emps || 'employees inthis department');
END;
/

SQL> /

You are working in theFinance department. There are 6 employees in this
department
PL/SQL procedure successfullycompleted.

 

           CASE语句也分为SimpleCASE语句和Searched CASE语句。他们之间的区别和CASE表达式一样。上述例子属于SimpleCASE的用法,如果要使用Searched CASE语句,可以写成如下形式:

 

SQL> edit

DECLARE
        v_deptid NUMBER;
        v_deptname VARCHAR2(20);
        V_emps NUMBER;
        v_mngid NUMBER:= 100;
BEGIN
        CASE
            WHEN v_mngid = 108 THEN
                --v_mngid不作为选择值,而是直接在WHEN后面进行判断
                SELECT department_id,department_name
                INTO v_deptid, v_deptname
                FROM departments
                WHERE manager_id = 108;
 
                SELECT count(*)
                INTO v_emps
                FROM employees
                WHERE department_id = v_deptid;
                                               
            WHEN v_mngid = 200 THEN
                SELECT department_id,department_name
                INTO v_deptid, v_deptname
                FROM departments
                WHERE manager_id = 200;
 
                SELECT count(*)
                INTO v_emps
                FROM employees
                WHERE department_id = v_deptid;
           ELSE
                SELECT department_id,department_name
                INTO v_deptid, v_deptname
                FROM departments
                WHERE manager_id = 100;
 
                SELECT count(*)
                INTO v_emps
                FROM employees
                WHERE department_id = v_deptid;
        END CASE;
        
        DBMS_OUTPUT.PUT_LINE('You are workingin the ' || v_deptname || ' department. There are ' ||v_emps || 'employees inthis department');
END;
/

 

SQL> /

You are working in theExecutive department. There are 3 employees in this
department
PL/SQL procedure successfullycompleted.

三、关于NULL值的处理

NULL值在PL/SQL中有一些特殊的属性:

a. 在简单的比较运算表达式里如果有NULL值参与运算,最终的结果将表现为NULL值;

b.  在逻辑运算中如果出现了 NOT NULL,则结果还是NULL,只有写成IS NULL或者是IS NOT NULL,才能得到TRUE或者FALSE的值;

c. IF条件判断语句中只有结果为TRUE时,才执行THEN后面的语句,如果结果为NULL或者FASLE,则不会执行

d. NULL值在PL/SQL中还可以单独成为一条语句,用来表示什么都不做,例如:


                IF conditions THEN

                                Dosome thing;

                ELSE

                                NULL;

                               

使用NULL语句的主要有:

                1. 增强程序的可读性。

                2. 在标签后面使用NULL。

                标签的用法后文会详解,这里先举个小例子:                                           

                                DECLARE

                                                ...

                                BEGIN

                                                IFconditions THEN

                                                      GOTO LastPoint

         -- GOTO表示执行到这一步时,直接跳转到标签LastPoint所在的位置。

                                                ENDIF

                                                ...

                                <<LastPoint>>

         --标签LastPoint的后面应该有语句,但在生产环境中经常会碰到标签后面不做任何操作的情况

         --使用NULL;语句,可以既满足语法规则,又不做任何操作。

                                                NULL;

                                END;


 

四、条件判断中的逻辑关系

1. 逻辑运算符AND,OR和NOT

         在进行条件判断时可以使用逻辑运算符AND, OR 和NOT,当布尔值和逻辑运算符组合起来后会形成各种逻辑关系:

8.PL_SQL——PL_SQL中的条件控制语句

2. 短路现象

         短路操作是指在逻辑判断中只用判断一部分条件而无需判断整个条件的运算方式。如果逻辑运算符是AND,则AND前面的条件判断为FALSE后,就不继续判断AND后面的条件了;如果逻辑运算符是OR,则OR前面的条件判断为真后,就不继续判断OR后面的条件了。


您可能感兴趣的文档:

--结束END--

本文标题: 8.PL_SQL——PL_SQL中的条件控制语句

本文链接: https://www.lsjlt.com/news/39139.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 8.PL_SQL——PL_SQL中的条件控制语句
        和大多数程序语言一样,PL/SQL也有控制语句执行的结构,主要包括:       &nb...
    99+
    2022-10-18
  • 9.PL_SQL——PL_SQL中的循环控制语句
    循环是指在程序中重复执行一条或多条语句、PL/SQL中的循环主要有三种:           &...
    99+
    2022-10-18
  • javascript中条件控制语句是什么
    这篇文章主要为大家展示了“javascript中条件控制语句是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript中条件控制语句是什么”这篇文章吧。js条件控制语句有:1、if...
    99+
    2023-06-15
  • javascript条件控制语句有哪些
    javascript中的条件控制语句有:1.if语句,基于不同的条件执行不同的操作;2.switch语句,多重条件判断语句;3.while语句,先判断后循环的条件控制语句;4.for语句,先判断后循环的条件控制语句;javascript中的...
    99+
    2022-10-23
  • Kotlin条件控制语句汇总讲解
    目录一、if表达式1、带返回值if表达式2、if 表达式替代三目运算符3、多级if表达式二、When表达式三、when 表达式的功能增强1、Kotlin 1.3 版本之前 when2...
    99+
    2022-11-13
  • shell脚本中case条件控制语句的使用
    本篇内容介绍了“shell脚本中case条件控制语句的使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在shell脚本中,发现case语句...
    99+
    2023-06-09
  • Shell脚本的条件控制和循环语句
    条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expre...
    99+
    2022-06-04
    语句 脚本 条件
  • JavaScript条件控制语句有什么作用
    JavaScript条件控制语句用于根据不同的条件执行不同的代码块。它们的作用包括:1. 执行不同的代码:条件控制语句允许根据条件选...
    99+
    2023-10-12
    JavaScript
  • shell脚本中case条件控制语句的一个bug分析
    在shell脚本中,发现case语句的一个问题。就是指定小写字母[a-z]和大写字母[A-Z]的这种方法不管用了。 出现如下情况: [root@station1 ~]# cat case.sh#!/bin...
    99+
    2022-06-04
    语句 脚本 条件
  • PHP学习笔记:条件语句与循环控制
    【引言】在学习PHP编程语言过程中,条件语句与循环控制是必须掌握的基础知识点。条件语句用于根据不同的情况执行不同的代码,而循环控制则允许我们重复执行一段代码多次。本文将详细介绍PHP中的条件语句与循环控制,并提供具体的代码示例。【一、条件语...
    99+
    2023-10-21
    学习 PHP 条件语句 循环控制
  • Python基础学习之条件控制语句小结
    目录一、条件控制语句的补充二、break三、continue四、return五、结语一、条件控制语句的补充 在循环里面,我们可以通过关键字来手动终止循环,而不是把整个程序停了来终止。...
    99+
    2022-11-12
  • Shell脚本中条件控制和循环语句怎么用
    这篇文章主要介绍了Shell脚本中条件控制和循环语句怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。条件判断:if语句语法格式:if [ expres...
    99+
    2023-06-09
  • SQL语句中的条件查询
    条件查询:     * 什么是条件查询?不是将表中所有数据都查出来,而是查询出符合条件的。         * 语法格式:                     select                           ...
    99+
    2023-09-01
    数据库 sql mysql
  • python中的条件判断语句
    在python中使用条件判断语句一定不要忘记if else elif后面的冒号:哦 if语句的特点: 从上往下判断,如果某一个判断是true,将该判断条件对应的语句执行,忽略后面剩下的else和elif 1、用if语句实现 如果判断结果...
    99+
    2023-01-31
    语句 条件 python
  • Java中的控制流如何利用条件语句与循环结构确定
    Java中的控制流如何利用条件语句与循环结构确定?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、块作用域块(block),即复合语句。是指由一对大括号括起来的...
    99+
    2023-05-31
    java 循环结构 条件语句
  • Python中条件语句、循环语句和pass语句的使用示例
    目录一、条件语句1、if……else……语句 1)单分支2)双分支 2、if…&hellip...
    99+
    2022-11-11
  • SQLSERVER中的流程控制语句
    目录批处理1、BEGIN...AND语句2、IF...ELSE语句3、 CASE语句4、 WHILE语句5、无条件退出语句RETURN6、无条件跳转语句GOTO7、WAITFOR语句...
    99+
    2022-11-13
  • Go语言中的条件语句怎么使用
    这篇文章主要介绍“Go语言中的条件语句怎么使用”,在日常操作中,相信很多人在Go语言中的条件语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言中的条件语句怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • Python中的条件判断语句与循环语句用法小结
    if语句 >>通用格式 if语句一般形式如下: if <test1>: <statements1> elif <test2>: <stateme...
    99+
    2022-06-04
    语句 小结 条件
  • C语言控制语句中循环的用法
    本篇内容主要讲解“C语言控制语句中循环的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言控制语句中循环的用法”吧!入口条件循环:while循环在执行多次循环之前之就已经决定是否执行循环代...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作