【IT168 技术】在前几篇文章中,我们为大家介绍了达梦7.0数据库的几个新特性:水平分区、动态性能监视和批量处理技术。本篇文章我们将为大家介绍达梦7.0之PL/SQL。
相关文章:
• 达梦7.0新版本即将发布 新特性抢先看
• 达梦数据库7.0版新特性之动态性能监视
• 达梦数据库7.0版新特性之批量处理技术
1. PL/SQL概述
PL/SQL是达梦数据库对标准SQL语言的扩展,达梦数据库公司已经将PL/SQL整合到达梦数据库服务器中,PL/SQL是达梦数据库的过程化语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数。
在DM7中,对PL/SQL功能做了很大的改进,同时加入了很多新的功能,使得PL/SQL的使用、执行都有很大的改善,主要体现在下面四个方面:
(1)PL/SQL增加了对DM7中新增的类类型的支持。
(2)从DM7开始,PL/SQL支持全部C语言语法,这样在对自定义的PL/SQL语法不熟悉的情况下也可以对数据库进行各种操作,这样可以使对数据库的操作更加灵活,也更加容易,这是在各数据库系统中很少有的。
(3)DM7也支持PL/SQL语句块的执行计划重用的功能,这样可以避开对大量语句的重复分析,从而可以很有效的提高系统的执行效率。
(4)DM7中对SQL的执行是类似JAVA虚拟机的模式,这种运行机制可以有效提升PL/SQL的执行效率。
2. C语法的PL/SQL
在我们印象中,PL/SQL是很复杂的,因为它有自己的语法规则,并且通常都不会去记那么多并且复杂的语法,只是在用的时候查看程序员手册,所以写一个可以执行并且正确的PL/SQL语句是比较困难的。
在达梦数据库中,第一次实现了用C语言语法作为PL/SQL的一个可选语法,这就为那些了解C语言的人提供了很大的方便性,而无需去查看程序员手册就可以很自如的完成一个语句块,这对SQL程序员而言,这个功能无疑是他们梦寐以求的。
在C语法PL/SQL的应用方面,定义一个语句块不需要用BEGIN及END把语句包含起来,而是直接用大括号括住即可。下面举一个C语法的PL/SQL的例子来更具体的说明。
string str=' Hello World';
int count = 0;
for(count = 0; count < 10; count++)
{
if(power(count, 2) % 2 == 0)
print concat(power(count, 2), str);
}
}
输出:
0 Hello World
4 Hello World
16 Hello World
36 Hello World
64 Hello World
0 rows affected
time used: 42.978(ms) clock tick:111735871.
从上面例子可以看出,用C语法的PL/SQL时,程序可以变得非常简单易懂,可以很自由的调用一些系统内部函数(如上面例子中的concat()、power())、存储函数、过程等等。可以定义象C#中的一些数据类型,如上面例子所示STRING类型,还可以定义C语言中的基本数据类型,如上面例子中的int,另外还支持全部的SQL类型,达梦数据库内部定义的类类型、数组类型、游标类型等。
3. PL/SQL的执行原理
DM7的SQL语句执行是仿照JAVA虚拟机(VM)模式实现的。这种运行机制可以有效提升PL/SQL的执行效率。
方法(METHOD):执行计划的实际执行体称为方法。方法中包含3个主要元素:变量、指令以及操作符。
变量(VARIABLE):方法的变量分为参数、局部变量以及返回值。无论哪种变量,都通过VM的堆栈进行读写访问。不同类型的变量,占用堆栈的字空间也是不同的。除了变长的串类型,每个类型变量对应的字空间都是确定的。但不论哪种类型的变量,其在VM堆栈中都是字对其存放的。VM堆栈的字宽度也是可变的。在32位系统下,一个字长为4字节,而64为系统下,则为8字节。
指令(DIRECTIVE):DM7执行器借助指令进行变量读写、各类运算、跳转循环以及异常处理。DM7执行器提供了100多个指令,每个指令仅执行最基本的操作,如LOAD、STOR、JMP等。但将不同的指令组合起来,就可以实现任意复杂的处理逻辑。指令是流式组织并顺序执行的(除了特殊的跳转指令)。每个方法都包含一个指令流来完成主体执行流程。在涉及计算的SQL操作符中,也包含各自的指令流。
操作符(OPERATOR):DM7执行器的SQL操作符简称操作符。操作符是SQL语句物理计划的组成元素,它们负责对表中数据进行访问和处理。每个单独的增、删、改或查询语句都对应有一棵由操作符构成的二叉树物理计划。