1. 基本内容
DMSQL 程序是达梦数据库对标准 SQL 语言的扩展,是一种过程化 SQL 语言。
在DMSQL 程序中,包括一整套数据类型、条件结构、循环结构和异常处理结构等,DMSQL 程 序中可以执行 SQL 语句,SQL 语句中也可以使用 DMSQL 函数。
DMSQL 程序可以分为存储模块和客户端 DMSQL 程序两类。 用户可以使用 DMSQL 程序语言创建过程或函数,称为存储过程和存储函数。存储过程和存储函数统称 为存储模块。 客户端 DMSQL 程序可以实现的功能与存储模块一致,不同的是客户端 DMSQL 程序并 不创建一个具体的数据库对象。其处理方法为 DM 数据库服务器在预编译阶段将客户端 DMSQL 程序转化为虚过程。虚过程不需要存储,创建后立即执行,当执行的语句释放时, 虚过程对象也一同被释放。客户端 DMSQL 程序只从语法上和存储模块兼容,完成和存储模 块一样的功能,是一种编程手段。
2. 存储过程
关于DM建立存储过程的语法,结构描述较为复杂,初学者容易掌握不住重点,一头扎进文字中,最好的方法是在运用中了解,由浅及深,很多学习过程都是如此。
- 先看一个简单的例子,看看基础的存储过程能完成什么任务:
存储过程pcd_1把 将一个输入参数进行处理后输出。存储过程名之后的括号内为输入/输出参数,类型可以为IN、和IN OUT(OUT IN)。AS之后的语句为模块体,或称为语句块。DECLARE后为变量的声明(可以省略DECLARE),从begin到end之间的语句为执行体,执行体是存储过程与存储函数最核心的部分,执行体存放的是存储模块实际运行,实际起作用的内容。CREATE PROCEDURE pcd_1(a IN OUT INT) AS DECLARE b INT:=20; BEGIN a:=a+b; PRINT a; END;
- 如果我们需要存储过程做到可替换,即如果同名存在则替换之,只需要在CREATE后加上OR REPLACE关键字;如果需要将存储过程加密,可以在存储过程名后加上WITH ENCRYPTION:
CREATE OR REPLACE PROCEDURE pcd_1 WITH ENCRYPTION(a IN OUT INT) AS DECLARE b INT:=10; BEGIN a:=a+b; PRINT a; END;
- 进一步地,如果想进一步增强其健壮性,可以在可执行部分后加上异常处理语句,关键字为EXCEPTION:
CREATE OR REPLACE PROCEDURE pcd_1 WITH ENCRYPTION(a IN OUT INT) AS b INT:=10; BEGIN a:=a+b; PRINT a; exception WHEN others then null; END;
-
当然,输入的参数可以不止一个,声明的变量也可以不止一个。
CREATE OR REPLACE PROCEDURE pcd_1 WITH ENCRYPTION(a IN INT,b IN int) AS c INT:=6; d INT:=5; BEGIN a:=a+b; PRINT a; exception when others then null; END;
3. 存储函数
存储函数与存储过程比较类似,区别在于:
- 存储过程没有返回值,调用者只能通过访问 OUT 或 IN OUT 参数来获得执行结果,