暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PL/SQL详解之条件控制语句

Oracle微学堂 2018-10-18
720

1概念

PL/SQL程序可通过条件或循环结构来控制命令执行的流程。PL/SQL提供了丰富的流程控制语句,与C#一样也有三种控制结构:顺序结构 条件结构 循环结构

2条件控制

C#中的条件控制使用关键字if和switch。PL/SQL中关于条件控制的关键字有IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF和多分枝条件CASE。

IF-THEN

该结构先判断一个条件是否为TRUE,条件成立则执行对应的语句块,与C#中的if语句很相似,具体语法是:

C#中if语法

PL/SQL中IF语法

  if (条件){

    //条件结构体

  }

  IF 条件 THEN

    --条件结构体

  END IF;

说明:

IF关键字开始,END IF关键字结束,注意END IF后面有一个分号。
条件部分可以不使用括号,但是必须以关键字THEN来标识条件结束,如果条件成立,则执行THEN后到对应END IF之间的语句块内容。如果条件不成立,则不执行条件语句块的内容。
C#结构用一对大括号来包含条件结构体的内容。PL/SQL中关键字THENEND IF之间的内容是条件结构体内容。
条件可以使用关系运算符和逻辑运算符。

3案列分析

案例1:查询JAMES的工资,如果大于900元,则发奖金800元。

代码演示:IF-THEN应用

DECLARE

  newSal emp.sal % TYPE;

BEGIN

  SELECT sal INTO newSal FROM emp WHERE ename='JAMES';

  IF newSal>900 THEN

    UPDATE emp SET comm=800 WHERE ename='JAMES';

  END IF;

  COMMIT ; ②

END;

代码解析:

先判断条件,如果条件为TRUE,则执行条件结构体内部的内容。
PL/SQL块中可以使用事务控制语句,该COMMIT同时也能把PL/SQL块外没有提交的数据一并提交,使用时需要注意。

IF-THEN-ELSE

语法格式:IF-THEN-ELSE

C#中if语法

PL/SQL中IF语法

 if (条件){

  //条件成立结构体

 } else{

  //条件不成立结构体

 }

 IF 条件 THEN

  --条件成立结构体

 ELSE

  --条件不成立结构体

 END IF;

语法解析:

ELSEIF-THEN连在一起使用,如果IF条件不成立则执行就会执行ELSE部分的语句。

案例2:查询JAMES的工资,如果大于900元,则发奖金800元,否则发奖金400元。

代码演示:IF-THEN-ELSE应用

DECLARE

  newSal emp.sal % TYPE;

BEGIN

  SELECT sal INTO newSal FROM emp WHERE ename='JAMES';

  IF newSal>900 THEN

    UPDATE emp SET comm=800 WHERE ename='JAMES';

  ELSE

    UPDATE emp SET comm=400 WHERE ename='JAMES';

  END IF;

END;

 IF-THEN-ELSIF

C#中if语法

PL/SQL中IF语法

if (条件2){

  //条件成立结构体

}

else if(条件2){

  //条件不成立结构体

}

else{

  //以上条件都不成立结构体

}

IF 条件1 THEN

  --条件1成立结构体

ELSIF 条件2 THEN

  --条件2成立结构体

ELSE

  --以上条件都不成立结构体

END IF;

语法解析:

PL/SQL中的再次条件判断中使用关键字ELSIF,而C#使用else if

案例3:查询JAMES的工资,如果大于1500元,则发放奖金100元,如果工作大于900元,则发奖金800元,否则发奖金400元。

代码演示:IF-THEN-ELSIF应用

DECLARE

  newSal emp.sal % TYPE;

BEGIN

  SELECT sal INTO newSal FROM emp WHERE ename='JAMES';

  IF newSal>1500 THEN

    UPDATE emp SET comm=1000 WHERE ename='JAMES';

  ELSIF newSal>1500 THEN

    UPDATE emp SET comm=800 WHERE ename='JAMES';

  ELSE
    UPDATE emp SET comm=400 WHERE ename='JAMES';

  END IF;

 END;

CASE

CASE是一种选择结构的控制语句,可以根据条件从多个执行分支中选择相应的执行动作。也可以作为表达式使用,返回一个值。类似于C#中的switch语句。语法是:

语法格式:CASE



CASE [selector]

  WHEN 表达式1 THEN 语句序列1

  WHEN 表达式2 THEN 语句序列2

  WHEN 表达式3 THEN 语句序列3

  ……

  [ELSE 语句序列N]

END CASE;



 语法解析:

如果存在选择器selector,选择器selectorWHEN后面的表达式匹配,匹配成功就执行THEN后面的语句。如果所有表达式都与selector不匹配,则执行ELSE后面的语句。

案例4:输入一个字母ABC分别输出对应的级别信息。

代码演示:CASE中存在selector,不返回值

DECLARE

  v_grade CHAR(1):=UPPER('&p_grade'); ①

BEGIN

  CASE v_grade ②

    WHEN 'A' THEN

      dbms_output.put_line('Excellent');

    WHEN 'B' THEN

      dbms_output.put_line('Very Good');

    WHEN 'C' THEN

      dbms_output.put_line('Good');

    ELSE

      dbms_output.put_line('No such grade');

  END CASE;

END;

代码解析:
& grade表示在运行时由键盘输入字符串到grade变量中。
v_grade分别于WHEN后面的值匹配,如果成功就执行WHEN后的程序序列。

CASE语句还可以作为表达式使用,返回一个值。

代码演示:CASE中存在selector,作为表达式使用

DECLARE

  v_grade CHAR(1):=UPPER('&grade');

  p_grade VARCHAR(20) ;

BEGIN
p_grade :
=

  CASE v_grade
    WHEN 'A' THEN

      'Excellent'
    WHEN 'B' THEN

      'Very Good'

    WHEN 'C' THEN

      'Good'

    ELSE

      'No such grade'
  END;

  bms_output.put_line('Grade:' ||v_grade||',the result is '||p_grade);

END;

代码解析:

CASE语句可以返回一个结果给变量p_grade

PL/SQL还提供了搜索CASE语句。也就是说,不使用CASE中的选择器,直接在WHEN后面判断条件,第一个条件为真时,执行对应THEN后面的语句序列。

代码演示:搜索CASE

DECLARE

  v_grade CHAR(1):=UPPER('&grade');

  p_grade VARCHAR(20) ;

BEGIN

  p_grade :=

    CASE

      WHEN v_grade='A' THEN

        'Excellent'

      WHEN v_grade='B' THEN

        'Very Good'

      WHEN v_grade='C' THEN

        'Good'

      ELSE

        'No such grade'

    END;

    dbms_output.put_line('Grade:' ||v_grade||',the result is '||p_grade);
END;

扫描二维码关注我的微学堂

搜索刘老师微信号:Rman-2014,备注“Oracle学习与咨询”,即可添加好友;或者扫描下面二维码,关注我的“微学堂”公众号,了解最新OCP认证动态、题库及答案解析、培训机构及讲师介绍、课堂授课内容等。每天还有一篇技术文章发布哦!





最后修改时间:2019-12-20 16:31:23
文章转载自Oracle微学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论