Oracle数据库第四课——PL/SQL中的条件控制

知识点: PL/SQL 有 3 种类型的条件控制结构:IFELSIF CASE 语句。掌握 IF 语句的用法, 掌握 ELSIF 语句的用法, 理解嵌套 IF 语句的用法, 掌握 CASE 语句的用法。

 

1、 if 语句

        IF 语句有两种形式:IF-THEN IF-THEN-ELSE。使用 IF-THEN 语句,可以指定需要执行的一组动作。换句话说,只有当条件的计算结果为 TRUE 时,才回执行这组动作。 IF-THEN-ELSE 语句指定两组动作。当条件的计算结果为 FALSE 或者 NULL 时,才会执行第 2 组动作。

1.1 使用 if-then语句

IF-THEN 语句是选择语句中最简单的一种形式,它只做一种情况或条件判断。 IF-THEN 语句语法:

IF CONDITION THEN
    STATEMENT ;
END IF;

语法说明:

         CONDITION 是条件表达式,当其值为 true 时,程序才会执行 THEN 后面,END IF 前面的 PL/SQL 具体操作语句 STATEMENT;如果值为 false null 时,程序则不会执行 STATEMENT 语句,而是执行 END IF 后面的语句。

 

示例练习1:使用if-then语句,判断两个数的大小,并输出较大的数

第一步:使用scott账号登录PLSQL Developer,并且单击菜单栏【文件】——【新建】——【SQL Window】,即可打开SQL Window窗口。

Oracle数据库第四课——PL/SQL中的条件控制_第1张图片

第二步:在SQL Window窗口,输入SQL语句。

Oracle数据库第四课——PL/SQL中的条件控制_第2张图片

declare
  v_num1 number := 5;
  v_num2 number := 3;
begin
  if v_num1>v_num2 then
    dbms_output.put_line('v_num1比较大');
  end if;
end;

第三步:在工具栏单击执行按钮,然后在SQL Window窗口切换到【输出】,查案结果。

Oracle数据库第四课——PL/SQL中的条件控制_第3张图片

注意:在点击【执行】工具按钮时,会弹出一个提示框“"动态执行表不可访问, 本会话的自动统计被禁止。在执行菜单里你可以禁止统计, 或在v$session,v$sesstat和v$statname表里获得选择权限。"

Oracle数据库第四课——PL/SQL中的条件控制_第4张图片

简单处理办法:忽略此提示,直接单击【确定】或者勾选【不再显示此信息】后再单击【确定】。

详细解决办法:点击链接

 

1.2 使用 IF-THEN-ELSE 语句

        在编写程序的过程中,if……then……else 语句是最常用到的一种选择语句,它可以实现判断两种情况,只要 if 后面的条件表达式为 false,程序就会执行 else 语句下面的 PL/SQL语句。if……then……else 语句的语法:

IF CONDITION THEN
    STATEMENT 1;
ELSE 
    STATEMENT 2;
END IF;

语法说明:

        CONDITION 为条件表达式,当其值为 true 时,程序才会执行 THEN 后面,ELSE 前面 的 PL/SQL 具体操作语句 STATEMENT;如果值为 false null 时,程序则会执行 ELSE后,END IF 前的 STATEMENT 语句。

 

示例练习2:使用if-then-else语句,判断是否可以退休

第一步:在SQL Window窗口,输入SQL语句。

Oracle数据库第四课——PL/SQL中的条件控制_第5张图片

declare
  v_age int := 56;
begin
  if v_age > 55  then
    dbms_output.put_line('您可以申请退休了!');
  else
    dbms_output.put_line('继续为人民服务!');
  end if;
end;

第二步:在工具栏单击执行按钮,然后在SQL Window窗口切换到【输出】,查案结果。

Oracle数据库第四课——PL/SQL中的条件控制_第6张图片

 

1.3 条件值为 NULL

        在某些情况下,IF语句中所使用的条件的计算值可能是NULL,而不是TRUE或者FALSE。对于 IF-THEN 结构,如果相关的条件计算值为 NULL,则不执行指定的语句,会继续执行END IF 之后的可执行语句。对于 IF-THEN-ELSE 语句,当相关的条件计算值为 NULL 时,会执行保留字 ELSE 所指定的语句。

示例练习3:当条件值为NULL时,if-then-else语句的执行

declare
  v_num1 number := 5 ;
  v_num2 number ;
begin
  if v_num1 = v_num2 then
    dbms_output.put_line (' v_num1 = v_num2 ');
  else
    dbms_output.put_line(' v_num1 != v_num2 ');
  end if;
  dbms_output.put_line('这里是end if后面的语句');
end;

输出结果:

Oracle数据库第四课——PL/SQL中的条件控制_第7张图片

说明:变量 v_num2 没有赋值,因此,变量 v_num2 的值是 NULL,所以条件 v_num1=v_num2 的结果为 NULL。当条件表达式值为 FALSE NULL 时,IF-THEN-ELSE 语句会执行 ELSE 块中的内容。

 

2、 elsif 语句

        当有多个情况或条件需要判断时,ELSIF 语句常常被使用。这里特别值得注意的是, PL/SQL 中的 ELSIF 写法不同于 java C 语言程序中的 elseifELSIF 的写法为“ELSIF”, 中间没有字母“E”,一定不要写成了“ELSEIF”。elsif 语句的语法:

IF CONDITION1 THEN
    STATEMENT 1;
ELSIF CONDITION2 THEN
    STATEMENT 2;
……
ELSE 
    STATEMENT 3;
END IF;

语法说明:

          首先判断 CONDITION1 的值是否为 true,若为 true 程序则执行 STATEMENT1;如果值为false null 时,程序则会判断 CONDITION2 的值,若为 true 程序则执行 STATEMENT2,如果值为 false null ,则继续向下判断,只要条件为 true 就会执行当前 ELSIF 语句块中的 STATEMENT 语句,若所有 ELSIF 语句条件部分都判断完,都为 false null,程序才会执行 ELSE STATEMENT3 语句。

示例练习4:使用elsif语句,进行多个条件判断

declare
  v_month int := 2 ;
begin
  if v_month >= 3 and v_month <= 5 then
    dbms_output.put_line (' 这是春季 ');
  elsif v_month >= 6 and v_month <= 8 then
    dbms_output.put_line (' 这是夏季 ');
  elsif v_month >= 9 and v_month <= 11 then
    dbms_output.put_line (' 这是秋季 ');
  elsif v_month =12 or v_month <= 2 and v_month > 0 then
    dbms_output.put_line (' 这是冬季 ');
  else
    dbms_output.put_line (' 对不起,月份数字不合法! '); 
  end if;
end;

注意:if-then-elsif 语句中,多个条件表达式之间不能存在逻辑上的冲突,否则程序将判断出错。

代码说明:在oracle中and比or优先级高。

示例中的代码 v_month =12 or v_month <= 2 and v_month > 0 ,等同于v_month =12 or ( v_month <= 2 and v_month > 0 )

输出结果:

Oracle数据库第四课——PL/SQL中的条件控制_第8张图片

案例延伸练习:使用条件分支的例子

需求:指定某个员工涨工资(emp表)

说明:如果这个员工是10号部门,工资上涨300;如果这个员工是20号部门,工资上涨500;如果这个员工是30号部门,工资上涨600

 

 

3、 嵌套 if  语句

        我们已经学了各类 IF 语句的语法及用法。那么它们除了能各自使用外,还能相互嵌套使用。逻辑思路上与 java 语言或者 c 语言大体是一致的。

       嵌套 IF 语句没有所谓的语法规范,仅是将这些 IF 语句结构根据逻辑需要嵌套起来使用而已。

示例练习5:使用嵌套 if 语句

declare
  v_num1 number := &input_num1 ;
  v_num2 number := &input_num2 ;
  v_total number;
begin
  if v_num1 > v_num2 then
     dbms_output.put_line (' 这是外层if结构的if部分 ');
     v_total := v_num1 - v_num2 ;
  else
     dbms_output.put_line (' 这是外层if结构的else部分 ');
     v_total := v_num1 + v_num2 ;
     if v_total < 0 then --内层if语句开始
        dbms_output.put_line (' 这是内层if结构的if部分 ');
        v_total := v_total * (-1) ;
     end if;--内层if语句结构结束
  end if;
      dbms_output.put_line (' v_total 的值是 ' || v_total );
end;

语法说明:变量声明 v_num1 number :=&input_num1 中,&input_num1 表示由控制台用户输入一个数,赋值给 v_num1 变量。

结果演示:

Oracle数据库第四课——PL/SQL中的条件控制_第9张图片

 

4、 case 语句

4.1  使用case 语句

        从 Oracle9i 之后,PL/SQL 也可以像其他变成语言一样使用 case 语句,case 语句的执行方式与 if…then…elsif 语句十分相似。在 case 关键字的后面有一个选择器,它通常是一个变量,程序就从这个选择器开始执行,接下来是 when 子句,并且在 when 关键字的后面是一个表达式,程序将根据选择器的值去匹配每个 when 子句的表达式的值,从而实现执行不同的 PL/SQL 语句。 CASE 语句的语法:

CASE selector
    WHEN expression_1 THEN statement_1;
    WHEN expression_2 THEN statement_2; 
    …
    WHEN expression_n THEN statement_n;
    [ELSE statement ;]
END CASE;

语法说明:

       Selector 表示一个变量,用来存储要检测的值,通常称之为选择器。该选择器的值需要与when 子句中的表达式的值进行匹配。如果 selector 的值与 WHEN 后面的 expression 值相等,那么程序将执行当前 WHEN-THEN 后面的 statement 语句。如果不相等,则依次向下判断相等,如若没有匹相等配项,则程序执行 ELSE 后的 statement 语句。

示例练习6:使用 case 语句判断季度数,并输出相关信息

declare
    v_session int :=3; --定义整形变量并赋值,表示季度
    v_aboutInfo varchar2(50); --存储输出信息
begin
    case v_session 
      when 1 then
      v_aboutInfo := v_session || '季度包括 1,2,3 月份' ;  --变量和字符串的拼接
      when 2 then
      v_aboutInfo := v_session || '季度包括 4,5,6 月份';
      when 3 then
      v_aboutInfo := v_session || '季度包括 7,8,9 月份';
      when 4 then
      v_aboutInfo := v_session || '季度包括 10,11,12 月份';
      else
      v_aboutInfo := v_session ||'季度数字不合法'; 
    end case; 
    dbms_output.put_line(v_aboutInfo);
end;

输出结果:

Oracle数据库第四课——PL/SQL中的条件控制_第10张图片

 

4.1  搜索式case 语句

        捜索式 CASE 语句有个能够产生布尔值(TRUE. FALSE 或者 NULL)的搜索条件。当特定搜索条件的计算结果为 TRUE 时,会执行与该条件相关的语句组合。 捜索式 CASE 语句的语法:

CASE
    WHEN search_condition_1 THEN statement_1; 
    WHEN search_condition_2 THEN statement_2;
    ……
    WHEN search_condition_n THEN statement_n;
    [ELSE statement;]
END CASE;

语法说明:

        search_condition_1 表示一个条件表达式。当搜索条件的计算结果为 TRUE 时,执行控制权传递给与之相关的语句。如果任何搜索条件都不会产生 TRUE,则就会执行与 ELSE 子句相关的语句。

示例练习7:使用搜索式 case 语句,根据成绩判断分数等级

declare
    v_grade int :=89; --分数
    v_gradeInfo varchar2(20); --分数等级信息
begin
    case
      when v_grade >=90 THEN v_gradeInfo := 'A';
      when v_grade >=80 THEN v_gradeInfo := 'B';
      when v_grade >=70 THEN v_gradeInfo := 'C';
      when v_grade >=60 THEN v_gradeInfo := 'D'; 
      ELSE v_gradeInfo := 'E';
    end case; 
    dbms_output.put_line( '成绩等级为:' || v_gradeInfo );
end;

输出结果:

Oracle数据库第四课——PL/SQL中的条件控制_第11张图片

注意: 搜索式 CASE 语句在结构上不同于简单的 CASE 语句,搜索式 CASE 语句没有选择器

技巧:在进行多种情况判断时,建议使用 case 替换 if…then…elsif 语句,因为 case 语句的语法更加简洁明了,易于阅读。

 

 

 

 

=========这里是结束分割线===========

你可能感兴趣的:(Oracle数据库开发,oracle条件控制,elsif语句的使用,if-then语句,if-then-else语句)