文章目录

  • 一、条件控制 IF 语句
    • 1.1 IF语句
    • 1.2 NULL 条件
  • 二、条件控制 CASE语句
  • 三、搜索式CASE语句
  • 四、NULLIF 函数
  • 五、COALESCE函数
  • 六、迭代控制
    • 6.1 简单循环
    • 6.2 EXIT语句
    • 6.3 WHILE 循环
    • 6.4 FOR循环
    • 6.5 CONTINUE语句

一、条件控制 IF 语句

PL/SQL有3种类型的条件控制:IF、ELSIF和CASE语句

1.1 IF语句

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

END IF标识IF-THEN结构结束。

1.2 NULL 条件

DECLAREv_num1 NUMBER := 10;-- 未初始化值为NULLv_num2 NUMBER;
BEGINIF v_num1 = v_num2 THENDBMS_OUTPUT.PUT_LINE('条件成立');ELSEDBMS_OUTPUT.PUT_LINE('条件不成立');END IF;
END;

二、条件控制 CASE语句

CASE 语句存在两种形式:CASE和搜索式CASE。CASE语句可以设定选择器,选择器会决定需要执行哪组动作。而搜索式CASE语句没有选择器,搜索条件会按顺序计算,从而决定采取哪组动作。

CASE语句具有如下结构
CASE SELECTOR
WHEN EXPRESSION 1 THEN STATEMENT 1;
WHEN EXPRESSION 2 THEN STATEMENT 2;

WHEN EXPRESSION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;

请注意,选择器只会计算一次,并且会顺序计算WHEN子句。表达式的值与选择器的值进行比较。如果两种值相等,那么与特定WHEN子句相关的语句会执行,并且随后的WHEN子句不会被计算。 如果任何表达式都不匹配选择器的值,则ELSE子句会被选中和执行。

DECLAREv_num1 NUMBER := #v_num2 NUMBER;
BEGINv_num2 := MOD(v_num1,2);CASE v_num2WHEN 0 THENDBMS_OUTPUT.PUT_LINE(v_num1||'是一个偶数');ELSEDBMS_OUTPUT.PUT_LINE(v_num1||'是一个奇数');END CASE;
END;

三、搜索式CASE语句

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

when 搜索条件N THEN 语句N;
ELSE 语句 N+1;
END CASE;

顺序执行搜索条件,条件成立执行主句。后续的搜索不再进行计算直接结束。
所有搜索条件都不成立执行ELSE的语句。

DECLAREv_num NUMBER := #
BEGINCASEWHEN MOD(v_num, 2) = 0 THENDBMS_OUTPUT.PUT_LINE(v_num||'是一个偶数');ELSEDBMS_OUTPUT.PUT_LINE(v_num||'是一个奇数');END CASE;
END;

四、NULLIF 函数

NULLIF函数会比较两个表达式。如果两者相同,函数会返回NULL;否则的话返回第一个表达式
NULLIF具有如下结构:
NULLIF(expression1, expression2)

DECLAREv_num1 NUMBER := #v_num2 NUMBER;
BEGINv_num2 := NULLIF(MOD(v_num1,2), 0);DBMS_OUTPUT.PUT_LINE('v_num2: '||v_num2);
END;

五、COALESCE函数

COALESCE函数会把表达式中每个表达式与NULL比较,并返回第一个非NULL表达式的值。
COALESCE函数具有如下结构:
COALESCE(expression1,expression2,…,expressionN)

六、迭代控制

PL/SQL有四种类型循环:简单循环、WHILE循环、FOR循环以及游标FOR循环。

6.1 简单循环

简单循环结构:
LOOP
语句 1;
语句 2;

语句 N
END LOOP;
保留字LOOP标识简单循环的开始。语句1到语句N是反复执行语句序列。END LOOP是表示循环结构结束的保留字。

退出条件决定循环终止的情况,退出条件有两种:EXIT和EXIT WHEN。

6.2 EXIT语句

使用EXIT子句,当EXIT条件为TRUE时,循环会终止。
LOOP
语句 1;
语句 2;
IF 条件表达式 THEN
EXIT; --退出循环
END IF;
END LOOP;
语句 3;

只有位于循环中,EXIT语句才有效。当EXIT语句出现在循环之外时,会带来语法错误。当PL/SQL语句块出现非正常结束情况时,应该使用RETURN语句
BEIGN
DBMS_OUTPUT.PUT_LINE(‘XXX’);
RETURN; --RETURN语句会终止PL/SQL语句块第二个OUPUT不会被运行。
DBMS_OUTPUT.PUT_LINE(‘YYY’);
END;

6.3 WHILE 循环

WHILE循环的结构如下:
WHILE 条件表达式 LOOP
语句 1;
语句 2;

语句 N;
END LOOP;

DECLAREv_cnt NUMBER := 1;
BEGINWHILE v_cnt <= 5 LOOPDBMS_OUTPUT.PUT_LINE('v_cnt = '||v_cnt);v_cnt := v_cnt + 1;END LOOP;
END;

6.4 FOR循环

FOR结构如下:
FOR 循环计数 IN [REVERSE] 下限…上限 LOOP
语句 1;
语句 2;

语句N
END LOOP;

BEGIN-- 这里的v_cnt不用提前定义FOR v_cnt IN 1..5 LOOPDBMS_OUTPUT.PUT_LINE('v_cnt = '||v_cnt);END LOOP;
END;
BEGINFOR v_cnt IN REVERSE 1..5 LOOPDBMS_OUTPUT.PUT_LINE('v_cnt = '||v_cnt);END LOOP;
END;

上例输出结果如下:
v_cnt = 5
v_cnt = 4
v_cnt = 3
v_cnt = 2
v_cnt = 1

6.5 CONTINUE语句

CONTINUE语句有两种形式:CONTINUE和CONTINUE WHEN

CONEINUE语句会导致循环终止当前迭代,并且当CONTINUE的条件为TURE时,开始执行该循环的下一次迭代。

LOOP
语句 1;
语句 2;
IF CONTINUE条件 THEN
CONTINUE;
END IF;
EXIT WHEN EXIT_CONDITION;
END LOOP;
语句 3;

BEGINFOR v_i IN 1..10 LOOPIF MOD(v_i,2)=0 THEN--终止当前循环进入下一次循环判断CONTINUE;END IF;DBMS_OUTPUT.PUT_LINE('v_i = '||v_i);END LOOP;
END;

上例输出结果如下:
v_i = 1
v_i = 3
v_i = 5
v_i = 7
v_i = 9

四、PL/SQL程序控制语句相关推荐

  1. Oracle数据库之PL/SQL程序基础设计

    一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /** 声明部分--定义常量.变量.复杂数据类型.游标.用户自定义异常*/ BEGIN /** 执行部分 ...

  2. PL/SQL流程控制语句

    介绍PL/SQL的流程控制语句, 包括如下三类: l 控制语句: IF 语句 l 循环语句: LOOP语句, EXIT语句 l 顺序语句: GOTO语句, NULL语句 1 条件语句 IF <布 ...

  3. ORA-00980与PL/SQL程序编译出错

        今天碰到一个有意思的问题.     为了降低统计分析数据库的计算和磁盘空间压力.我们使用了将远程数据库中数据通过DBLINK和SYNONYM的形式来缓解当前统计数据库所面临的问题.工作实施的比 ...

  4. PL/SQL程序基础2

    PL/SQL程序基础2 一.实验目标 二.实验项目 三.实验错误解决方案 一.实验目标 掌握较复杂的PL/SQL编程方法.具备如下能力: 针对数据库应用领域的数据需求,设计出基于Oracle数据库的解 ...

  5. PL/SQL程序基础1

    PL/SQL程序基础1 一.实验目标 1.针对数据库应用领域的数据需求,设计出基于Oracle数据库的解决方案的能力: 2.承担Oracle数据库系统的实施.运行与维护等基本工作的能力. 二.实验项目 ...

  6. PL / SQL在线编译器–在线运行Oracle PL / SQL程序

    In this tutorial you will learn about pl/sql online compiler that will let you run pl/sql programs o ...

  7. c语言 字符串字符反向储存_反向字符串的PL / SQL程序

    c语言 字符串字符反向储存 Here you will get pl/sql program to reverse a string. 在这里,您将获得pl / sql程序来反转字符串. The su ...

  8. PL/SQL程序结构

    1.PL/SQL介绍: PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语句的使用 ...

  9. oracle学习笔记5:pl/sql流程控制语句

    pl/sql编程中的流程控制语句主要有if语句,case语句以及循环语句 下面将逐个介绍这几个语句 1.if语句 -- 根据员工工资来判断奖金的多少,工资在5000以上的奖金500,工资在3000-5 ...

最新文章

  1. python入门系列——第2篇
  2. 人工神经网络——【BP】反向传播算法证明
  3. beam search算法
  4. kali2.0安装搜狗输入法
  5. Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
  6. 考教育统计与测量可以带哪种计算机,《教育统计与测量》练习题库及答案
  7. 认识VLAN,并学会VLAN的划分和网络配置实例
  8. PHP高效获取远程图片尺寸和大小(转)
  9. 如何成为一名更出色的开发者?
  10. Linux的守护进程
  11. 蜻蜓fm收音机电脑版_追寻逝去的时光:Tivoli Audio M1BT收音机蓝牙音箱体验
  12. Taskctl安装以及简单使用
  13. repaire mysql_sql错误:……is marked as crashed and should be repaire
  14. 04---项目后端业务实现
  15. 一种基于GRU神经网络的英文诗歌生成系统
  16. 绿洲App更换logo 在App Store重新上架,苏宁活动又来了!没上车的快来
  17. Jenkins企业应用
  18. Graphics2D画图
  19. 王者服务器维护7月九号,王者荣耀S20赛季确定7月9号开始,钻石夺宝新增猛男专用拖尾特效...
  20. 李某人的第一篇blog

热门文章

  1. ios5.1.1越狱实践
  2. 小鸟云产品/服务初体验
  3. 人工智能驾驶奥运会 Duckietown AI Driving Olympics
  4. 上海交通大学转专业到计算机,2018级自主转专业终审公示
  5. 导数、微分、积分的几何理解
  6. 工资计算系统数据流图绘制
  7. linux操作系统使用广泛吗,为何说Ubuntu是使用最广泛Linux操作系统的五大理由
  8. DCC2022:高阶帧内预测
  9. linux 星际争霸,让星际争霸在Linux操作系统下转起来
  10. iVX无代码挑战五秒游戏制作