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

第八章 数据库编程(3)——过程化SQL

凯哥的故事 2020-06-07
669


过程化SQL



SQL99标准支持过程和函数的概念,SQL可以使用程序设计语言来定义过程和函数,也可以用关系数据库管理系统自己的过程语言来定义。Oracle的PL/SQL、Microsoft SQL Server的Transact-SQL、IBM DB2的SQL PL、Kingbase的PL/SQL都是过程化的SQL编程语言。本节介绍过程化SQL(Procedural Language/SQL,PL/SQL)。

过程化SQL的块结构

基本的SQL是高度非过程化的语言。嵌入式SQL将SQL语句嵌入程序设计语言,借助高级语言的控制功能实现过程化。过程化SQL是对SQL的扩展,使其增加了过程化语句功能。

过程化SQL程序的基本结构是块。所有的过程化SQL程序都是由块组成的。这些块之间可以互相嵌套,每个块完成一个逻辑操作。下图是过程化SQL块的基本结构。

变量和常量的定义

①变量定义

变量名 数据类型 [[NOT NULL] :=初值表达式]

变量名 数据类型 [[NOT NULL] 初值表达式]

②常量的定义

常量名 数据类型 CONSTANT:=常量表达式

常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。如果试图修改它,过程化SQL将返回一个异常。

③赋值语句

变量名:=表达式

流程控制

过程化SQL提供了流程控制语句,主要有条件控制语句和循环控制语句。这些语句的语法、语义和一般的高级语言(如C语言)类似,这里只做概要的介绍。读者使用时要参考具体产品手册的语法规则。

①条件控制语句

一般有三种形式的IF语句:IF-THEN语句、IF-THEN-ELSE语句和嵌套的IF语句。

(1)IF语句

IF condition THEN

    Sequence_of_statements;

END IF;

(2)IF-THEN语句

IF condition THEN

    Sequence_of_statements1;

ELSE

    Sequence_of_statements2;

END IF;

(3)嵌套的IF语句

在THEN和ELSE子句中还可以再包含IF语句,即IF语句可以嵌套。

②循环控制语句

过程化SQL有三种循环结构:LOOP,WHILE-LOOP和FOR-LOOP。

(1)最简单的循环语句LOOP

LOOP

    Sequence_of_statements;

END LOOP;

多数数据库服务器的过程化SQL都提供EXIT、BREAK或LEAVE等循环结束语句,以保证LOOP语句块能够在适当的条件下提前结束。

(2)WHILE-LOOP循环语句

WHILE condition LOOP

    Sequence_of_statements;

END LOOP;

每次执行循环体语句之前首先要对条件进行求值,如果条件为真则执行循环体内的语句序列,如果条件为假则跳过循环并把控制传递给下一个语句。

(3)FOR-LOOP循环语句

FOR count IN [REVERSE] bound1 .. bound2 LOOP

Sequence_of_statements;

END LOOP;

FOR循环的基本执行过程是:将count设置为循环的下界bound1,检查它是否小于上界bound2。当指定REVERSE时则将count设置为循环的上界 bound2,检查count是否大于下界bound1。如果越界则执行跳出循环,否则执行循环体,然后按照步长(+1或-1)更新count的值,重新判断条件。

错误处理

如果过程化SQL在执行时出现异常,则应该让程序在产生异常的语句处停下来,根据异常的类型去执行异常处理语句。

SQL标准对数据库服务器提供什么样的异常处理做出了建议,要求过程化SQL管理器提供完善的异常处理机制。相对于嵌入式SQL简单地提供执行状态信息SQLCODE,这里的异常处理就复杂多了。读者要根据具体系统的支持情况来进行错误处理。


文章转载自凯哥的故事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论