存储过程
dm7存储过程学习 及示例
定义存储过程的语法如下:
CREATE [OR REPLACE ] PROCEDURE<过程声明><AS_OR_IS><模块体>
<过程声明> ::= <存储过程名定义> [WITH ENCRYPTION][(<参数名><参数模式><参数类型> [<默
认值表达式>] {,<参数名><参数模式><参数类型> [<默认值表达式>] })][<调用权限子句>]
<存储过程名定义> ::=[<模式名>.]<存储过程名>
<AS_OR_IS>::= AS | IS
<模块体> ::= [<声明部分>]
BEGIN
<执行部分>
[<异常处理部分>]
END [存储过程名]
<声明部分> ::=[DECLARE]<声明定义>{<声明定义>}
<声明定义>::=<变量声明>|<异常变量声明>|<游标定义>|<子过程定义>|<子函数定义>;
<执行部分>::=<DMSQL 程序语句序列>{;<DMSQL 程序语句序列>}
<DMSQL 程序语句序列> ::= [<标号说明>]<DMSQL 程序语句>;
<标号说明>::=<<<标号名>>>
<DMSQL 程序语句>::=<SQL 语句>|<控制语句>
<异常处理部分>::=EXCEPTION<异常处理语句>{;<异常处理语句>}
参数说明:
<存储过程名>:指明被创建的存储过程的名字
<模式名>:指明被创建的存储过程所属模式的名字,缺省为当前模式名
DM7SQL 程序设计
33
<参数名>:指明存储过程参数的名称
<参数模式>:参数模式可设置为 IN、OUT 或 IN OUT(OUT IN),缺省为 IN 类
型
<参数类型>:指明存储过程参数的数据类型
<声明部分>:由变量、游标和子程序等对象的声明构成,可缺省
<执行部分>:由 SQL 语句和过程控制语句构成的执行代码
<异常处理部分>:各种异常的处理程序,存储过程执行异常时调用,可缺省
<调用权限子句>:指定该过程中的 SQL 语句默认的模式
DBA 或具有 CREATE PROCEDURE 权限的用户可以使用上述语法新创建一个存储过程。
OR REPLACE 选项的作用是当同名的存储过程存在时,首先将其删除,再创建新的存储过
程,前提条件是当前用户具有删除原存储过程的权限,如果没有删除权限,则创建失败。使
用 OR REPLACE 选项重新定义存储过程后,由于不能保证原有对象权限的合法性,所以全
部去除。
WITH ENCRYPTION 为可选项,如果指定 WITH ENCRYPTION 选项,则对 BEGIN 到
END 之间的语句块进行加密,防止非法用户查看其具体内容。加密后的存储过程的定义可
在 SYS.SYSTEXTS 系统表中查询。
存储过程可以带有参数,这样在调用存储过程时就需指定相应的实际参数,如果没有参
数,过程名后面的圆括号和参数列表就可以省略了。
可执行部分是存储过程的核心部分,由 SQL 语句和流控制语句构成。支持的 SQL 语句
包括:
数据查询语句(SELECT)
数据操纵语句(INSERT、DELETE、UPDATE)
游标定义及操纵语句(DECLARE CURSOR、OPEN、FETCH、CLOSE)
事务控制语句(COMMIT、ROLLBACK)
动态 SQL 执行语句(EXECUTE IMMEDIATE)
SQL 语句必须以分号结尾,否则语法分析报错。
异常处理部分用于处理存储过程在执行过程中可能出现的错误。
下面是一个定义存储过程的简单示例:
1 CREATE OR REPLACE PROCEDURE RESOURCES.proc_1(a IN OUT INT) AS
2 b INT:=10;
3 BEGIN
4 a:=a+b;
5 PRINT a;
6 EXCEPTION
7 WHEN OTHERS THEN NULL;
8 END;
9 /
该例子在模式 RESOURCES 下创建了一个名为 proc_1 的存储过程。例子中第 2 行是
该存储过程的说明部分,这里声明了一个变量 b。注意在 DMSQL 程序中说明变量时,变量
的类型放在变量名称之后。第 4 行和第 5 行是该程序块运行时被执行的代码段,这里将 a
与 b 的和赋给参数 a。如果发生了异常,第 6 行开始的异常处理部分就对产生的异常情况
进行处理。说明部分和异常处理部分都是可选的。如果用户在模块中不需要任何局部变量或
者不想处理发生的异常,则可以省略这两部分。
更多内容请访问 达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心