达梦数据库存储过程的特点
达梦数据库允许用户使用系统提供的DMPL/SQL语言创建过程或函数,这些过程或函数象普通的过程或函数一样,有输入、输出参数和返回值,它们与表和视图等数据库对象一样被存储在数据库中,供用户随时调用。存储过程和存储函数在功能上相当于客户端的一段SQL批处理程序,但是在许多方面有着后者无法比拟的优点,它为用户提供了一种高效率的编程手段,成为现代数据库系统的重要特征。25亿网站后台管理系统将存储过程和存储函数统称为存储模块。
达梦数据库的存储模块机制是一种技术,而不是一种独立的工具,它是和服务器紧密结合在一起的。可以认为这种技术是执行DMPL/SQL语言的一种机器,它可以接受任何有效的存储模块,按照语言本身所规定的语义执行,并将结果返回给客户。
达梦数据库的存储模块机制具有如下优点:
1. 提供更高的生产率
(1) 在设计应用时,围绕存储过程/函数设计应用,可以避免重复编码,提高生产率;
(2) 在自顶向下设计应用时,不必关心实现的细节;
(3) 编程方便。
2. 便于维护
(1) 用户的存储模块在数据库集中存放;
(2) 用户可以随时查询、删除它们,而应用程序可以不作任何修改,或只做少量调整。
3. 提供更好的性能
(1) 存储模块在创建时被编译成伪码序列,在运行时不需要重新进行编译和优化处理,它具有更快的执行速度,可以同时被多个用户调用,并能够减少操作错误;如用sqlserver修改mssql2000的存储过程所有者为dbo,这些小地方还是有些麻烦的。
(2) 存储模块在执行时数据对用户是不可见的,提高了数据库的安全性;
(3) 存储模块具有更高的可靠性;
(4) 存储模块是一种高效访问数据库的机制,网站后台管理模板使用存储模块可减少应用对DM的调用,降低了系统资源浪费,显著提高性能,尤其是在网络上与DM通讯的应用更显著。
2.1.4.3 DM与Oracle存储过程对比表
操作 Oracle DM 差异 基本语法 存储过程: 存储过程: 无
CREATE [OR REPLACE] CREATE [OR REPLACE ]
PROCEDURE procedure_name PROCEDURE <存储过程名>
[ ( argument[{IN | OUT | IN [(<参数名> <参数模式> <参数类
OUT}] type, 型> {,<参数名> <参数模式> <参... 数类型>})]
argument[{IN | OUT | IN OUT}] AS | IS
type) ] {IS | AS} [<说明部分>]
procedure_body <执行部分>
其中procedure_name是要创建的[<异常处理部分>] 过程名,argument是过程的参数END;
名,type是关联参数的类型,存储函数:
procedure_body是构成该过程代CREATE [OR REPLACE ]
码的PL/SQL块。 FUNCTION <存储函数名> IN,OUT,和IN OUT是参数的模[(<参数名> <参数模式> <参数类式,如果没有为参数指定模式,型>{,<参数名> <参数模式> <参则参数缺省的模式是IN。 数类型>})]
存储函数: RETURN <返回数据类型> CREATE [OR REPLACE] AS | IS
FUNCTION function_name [<说明部分>]
[( argument[{IN | OUT | IN OUT}] <执行部分>
type, [<异常处理部分>] ... END;
argument[{IN | OUT | IN OUT}] 在存储函数中必须使用RETURNtype)] 语句向函数的调用环境返回一个RETURN return_type{IS | AS} 值。
function_body 存储函数不能用CALL语句调用,其中function_name是函数的名它只能出现在表达式中。 称,参数argument和type的含义存储函数和存储过程很相似,它与过程相同, return_type是函数们的区别在于:
返回值的类型,function_body是1. 存储过程没有返回值,而存储包括函数体的P L / S Q L块。IN , 函数有;
OUT,和IN OUT是参数的模式。2. 存储过程中可以没有返回语如果没有为参数指定模式,则参句,而存储函数必须通过返回数缺省的模式是IN。 语句结束;
3. 存储过程的返回语句中不能
带表达式,而存储函数必须带
表达式;
4. 存储过程不能出现在一个表
达式中,而存储函数只能出现
在表达式中。
创建存储CREATE [OR REPLACE ] CREATE [OR REPLACE ] 无
过程 PROCEDURE <存储过程名定义> PROCEDURE <存储过程名定义>
[(<参数名> <参数模式> <参 [(<参数名> <参数模式> <参数类型> [<默认值表达式>] 数类型> [<默认值表达式>]
{,<参数名> <参数模式> <参 {,<参数名> <参数模式> <参数类型> [<默认值表达式>] })] 数类型> [<默认值表达式>] })] [WITH ENCRYPTION] AS | IS [WITH ENCRYPTION] AS | IS
[<说明部分>] [<说明部分>]
BEGIN BEGIN
<执行部分> <执行部分>
[<异常处理部分>] [<异常处理部分>]
END; END;
撤销存储DROP PROCEDURE <存储过程DROP PROCEDURE <存储过程无 过程 名>; 名>;
调用存储CALL <存储过程名>[(<参数>{,<1. CALL <存储过程名>[(<参DM支过程 参数>})]; 数>{,<参数>})]; 持多
2. EXEC <存储过程名>[(<参种调
数>{,<参数>})]; 用方
3. <存储过程名>[(<参数>{,<参式
数>})];
创建存储CREATE [OR REPLACE ] CREATE [OR REPLACE ] 无 函数 FUNCTION <存储函数名定义> FUNCTION <存储函数名定义>
[(<参数名> <参数模式> <参 [(<参数名> <参数模式> <参
数类型> [<默认值表达式>] 数类型> [<默认值表达式>]
{,<参数名> <参数模式> <参 {,<参数名> <参数模式> <参
数类型> [<默认值表达式>]})] 数类型> [<默认值表达式>]})]
RETURN <返回数据类型> RETURN <返回数据类型>
[WITH ENCRYPTION] AS | [WITH ENCRYPTION] AS |
IS IS
[<说明部分>] [<说明部分>]
BEGIN BEGIN
<执行部分> <执行部分>
[<异常处理部分>] [<异常处理部分>]
END; END;
撤销存储DROP FUNCTION <存储函数DROP FUNCTION <存储函数无 函数 名>; 名>;
调用存储SELECT <存储函数名>[(<参SELECT <存储函数名>[(<参无 函数 数>{,<参数>})]; 数>{,<参数>})];
PLSQL支1. 顺序结构; 1. 顺序结构; 无 持的结构 2. 分支结构,包括条件、循环结2. 分支结构,包括条件、循环结
构等; 构等;
3. 迭代结构,包括子过程、子函3. 迭代结构,包括子过程、子函
数的调用。 数的调用。
语句块结DECLARE 语法格式: 无 构 ... [{DECLARE <变量说明>;} ]
BEGIN BEGIN
... <执行部分>
EXCEPTION [<异常处理部分>]
... END
END;
DMPL/SQL基本的程序单元;一
个语句可以当作一个整体SQL语
句对待,允许嵌套,可出现在SQL
语句能出现的任何地方。
赋值语句 variable := expression; 给对象赋值; DM支
语法格式: 持多
1. <赋值对象>:=<值表达式> 种赋
2. SET <赋值对象>=<值表达式> 值方
需要注意的是,使用第2种形式式
时,不需要冒号“:”。
变量定义 variable data_type 1. 在语句块的说明部分可以定义ORACL[:=|DEFAULT] default_value; 变量、游标、异常变量、子过程E支持
或子函数; 缺省
2. 需要强调的一点是,一个语句值;
块意味着一个作用域范围,也就DM不
是说,在一个语句块的说明部分支持
定义的任何对象,其作用域就是缺省
该语句块; 值;
3. 暂不支持缺省值的定义。
返回语句 RETURN; RETURN; 无 RETURN <结果值>; RETURN <结果值>;
1. 结束存储模块的运行,将控制
返回给调用者;
2. 如果从函数返回,同时返回函
数的结果。
退出循环 EXIT [WHEN condition]; EXIT [WHEN condition]; 无
1. EXIT与循环语句一起使用,用
于终止循环语句的执行,将控制
转移到循环语句的下一个语句;
2. 可以无条件终止循环语句;
3. 可以带条件终止循环语句,当
检测条件满足时才执行EXIT语
句。
IF语句 IF
THEN 根据布尔表达式的值,进行程序DM支 的分支控制; 持两[ELSIF 语法格式: 种语] IF <条件表达式> THEN 法标„ <执行部分>; 记 [ELSIF [{ELSEIF|ELSIF <条件表达式> ] THEN
„ <执行部分>;}]
[ELSE [ELSE <执行部分>;]
] END IF;
END IF; 注意:ELSEIF与ELSIF两种写法。
循环语句 1. WHILE 1. LOOP:循环执行,直至EXIT无
WHILE LOOP 语句终止;
; CREATE OR REPLACE
[;]... PROCUDURE P2 END LOOP; AS
2. LOOP A INT;
[ <