达梦数据库PL/SQL之控制结构 您所在的位置:网站首页 plsql连接达梦数据库显示连接关闭 达梦数据库PL/SQL之控制结构

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

2024-07-11 21:11| 来源: 网络整理| 查看: 265

一、背景介绍

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

二、块(block)的语法结构

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

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

语法格式如下:

DECLARE BEGIN EXCEPTION 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语句。

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有