dm7存储过程使用及简单示例

存储过程

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 行开始的异常处理部分就对产生的异常情况

进行处理。说明部分和异常处理部分都是可选的。如果用户在模块中不需要任何局部变量或

者不想处理发生的异常,则可以省略这两部分。

更多内容请访问  达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值