达梦数据库PL/SQL之控制结构

一、背景介绍

PL/SQL是一种程序语言,也叫做过程化SQL语言(Procedural Language/SQL),是对SQL语句的扩展。在普通SQL语句的使用上,增加了编程语言的特点,把数据查询和操作语句放在PL/SQL中,通过逻辑判断、循环等操作,可以实现复杂的功能或计算。
PL/SQL的基本单位叫做块(block),由三个部分组成:一个声明部分,主要是用来定义一些变量等信息;一个执行部分,这里就是我们控制结构所处的位置;最后是一个异常处理部分,如果程序报错,我们可以根据定义的报错做相应处理。

二、块(block)的语法结构

块(block)里面可以嵌套子块,类似SQL语句里面的子查询等嵌套;块组成结构,主要涉及四个关键词:


 DECLARE    --标记声明部分 
 ……       --此处用来定义常量、变量、类型和游标等
 BEGIN      --标记程序体部分开始 
 ……       --此处用来编写各种PL/SQL语句、函数和存储过程
 EXCEPTION  --标记异常处理部分开始
 ……       --此处用来编写异常处理代码
 END;       --标记程序体部分结束

语法格式如下:

DECLARE
   <declarations section>
BEGIN
   <executable command(s)>
EXCEPTION
   <exception handling goes here >
   WHEN exception1 THEN
       exception1-handling-statements
   WHEN exception2  THEN
      exception2-handling-statements
   WHEN exception3 THEN
      exception3-handling-statements
   ........
   WHEN others THEN
      exception3-handling-statements
END;

下面写一个简单的示例:

 首先是声明部分,我们定义一个变量msg;

然后是执行部分,我们设置变量msg等于“Hello world!”,然后直接打印msg信息;

再就是异常处理部分,我们设置如果出现其他情况,打印“It is not OK!”,该部分可有可无;

最后是结束部分,不需要做任何动作。

最终执行程序,打印出“Hello world!”。

三、PL/SQL的控制结构

在上面提到的示例中,执行部分,我们也可以用到控制结构。目前达梦数据库支持PL/SQL的控制结构主要由三种:选择结构、循环结构以及跳转结构。

1、选择结构

选择结构主要用的有IF语句、CASE语句;
选择结构之IF语句,基本语法如下:

IF condition1 THEN statements1;

[ELSEIF condition2 THEN statements2;]

……

[ELSE else_statements];

END IF;

IF语句中的条件是一个布尔型变量或表达式,取值只能是TRUE,FALSE,NULL,下面测试IF语句,TEST1里面有3条数据,然后定义两个变量比较大小,根据结果打印不同返回语句:

DECLARE
  T_1 BYTE;
  T_2 BYTE;
BEGIN
  T_1 := 5;
SELECT COUNT(*) INTO T_2 FROM SYSDBA.TEST1;
  IF T_1 > T_2 THEN
    PRINT 'T_1 larger than T_2!';
  ELSEIF T_1 = T_2 THEN
    PRINT 'T_1 equal T_2!';
  ELSE
    PRINT 'T_1 less than T_2!';
  END IF;
END;

 选择结构之CASE语句,基本语法如下:

CASE test_value
WHEN value1 THEN statements1
WHEN value2 THEN statements2
……
WHEN valuen THEN statementsn
[ELSE else_ statements]
END CASE;

该选择结构,也是对应不同的条件,返回不同的结果,下面测试,定义两个变量,给定其中一个变量具体值,另一个变量根据不同的值返回不同的结果: 

DECLARE
  grade CHAR(1) := '1'; 
  v_result VARCHAR2(20); 
BEGIN 
  v_result := 
    CASE grade 
      WHEN 'A' THEN 'Excellent' 
      WHEN 'B' THEN 'Very Good' 
      WHEN 'C' THEN 'Good'
      ELSE 'INPUT ERROR' 
    END; 
  print v_result; 
END;

2、循环结构 

循环结构主要用到的有LOOP基本循环、WHILE循环、FOR循环语句;
循环结构之LOOP基本循环,基本语法如下:

  LOOP
  sequence_of_statement;
  EXIT [WHEN condition] ; 
  END LOOP;

在基本循环中,也使用 CONTINUE 和 CONTINUE-WHEN 语句;要防止无限循环,必须使用EXIT或EXIT-WHEN语句;下面我们测试给定一个变量初始值,然后让这个数值在循环体内不断自增,打印当前数值:

DECLARE 
  x NUMBER := 0; 
BEGIN 
  LOOP 
    print 'Inside loop:  x = ' || TO_CHAR(x); 
    x := x + 1;  
    IF x > 10 THEN 
      EXIT; 
    END IF; 
  END LOOP; 
  print 'After loop:  x = ' || TO_CHAR(x); 
END;

循环结构之WHILE循环,基本语法如下:

 WHILE condition LOOP 
   sequence_of_statement;
 END LOOP; 

只要条件为真,WHILE-LOOP语句就执行循环体中的语句;下面我们给定一个变量初始值,然后定义WHILE循环条件,打印数值:

DECLARE
    counter INTEGER;
BEGIN
    counter := 0;
    WHILE counter < 6 LOOP
      counter := counter + 1;
      print counter;
    END LOOP;
END;

循环结构之FOR循环,基本语法如下: 

 FOR loop_counter IN [REVERSE] low_bound .. high_bound
 LOOP
   sequence_of_statement;
 END LOOP;

在FOR循环中,LOOP到END LOOP关键字之间,必须要有可执行语句,下面我们可以测试给定一个循环条件,当变量遍历各个不同值的时候,打印数值:

DECLARE
  i NUMBER := 5; 
BEGIN 
  FOR i IN 1..3 LOOP 
    print 'Inside loop, i is ' || TO_CHAR(i); 
  END LOOP; 
 
  print 'Outside loop, i is ' || TO_CHAR(i); 
END; 

3、跳转结构

跳转结构使用的试GOTO语句;
跳转结构之GOTO跳转,基本语法如下:

LABEL_NAME
...
GOTO LABEL_NAME

GOTO跳转语句,有一定限制:

块(BLOCK)内可以跳转,内层块可以跳到外层块,但外层块不能跳到内层;

IF语句不能跳入。不能从循环体外跳入循环体内。不能从子程序外部跳到子程序中;

由于GOTO语句的缺点,建议尽量少用甚至不用GOTO语句。

如需了解更多信息,详情可参考达梦官网文档达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值