达梦数据库存储过程的特点Word文件下载.docx
《达梦数据库存储过程的特点Word文件下载.docx》由会员分享,可在线阅读,更多相关《达梦数据库存储过程的特点Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。
操作
Oracle
DM
差异
基本语法
存储过程:
CREATE[ORREPLACE]PROCEDUREprocedure_name
[(argument[{IN|OUT|INOUT}]type,
...
argument[{IN|OUT|INOUT}]type)]{IS|AS}
procedure_body
其中procedure_name是要创建的过程名,argument是过程的参数名,type是关联参数的类型,procedure_body是构成该过程代码的PL/SQL块。
IN,OUT,和INOUT是参数的模式,如果没有为参数指定模式,则参数缺省的模式是IN。
存储函数:
CREATE[ORREPLACE]FUNCTIONfunction_name
[(argument[{IN|OUT|INOUT}]type,
argument[{IN|OUT|INOUT}]type)]
RETURNreturn_type{IS|AS}
function_body
其中function_name是函数的名称,参数argument和type的含义与过程相同,return_type是函数返回值的类型,function_body是包括函数体的PL/SQL块。
IN,OUT,和INOUT是参数的模式。
如果没有为参数指定模式,则参数缺省的模式是IN。
CREATE[ORREPLACE]PROCEDURE<
存储过程名>
[(<
参数名>
<
参数模式>
参数类型>
{,<
})]
AS|IS
[<
说明部分>
]
<
执行部分>
异常处理部分>
END;
CREATE[ORREPLACE]FUNCTION<
存储函数名>
{,<
RETURN<
返回数据类型>
在存储函数中必须使用RETURN语句向函数的调用环境返回一个值。
存储函数不能用CALL语句调用,它只能出现在表达式中。
存储函数和存储过程很相似,它们的区别在于:
1.存储过程没有返回值,而存储函数有;
2.存储过程中可以没有返回语句,而存储函数必须通过返回语句结束;
3.存储过程的返回语句中不能带表达式,而存储函数必须带表达式;
4.存储过程不能出现在一个表达式中,而存储函数只能出现在表达式中。
无
创建存储过程
存储过程名定义>
[(<
[<
默认值表达式>
]
]})]
[WITHENCRYPTION]AS|IS
BEGIN
撤销存储过程
DROPPROCEDURE<
;
调用存储过程
CALL<
参数>
})];
1.CALL<
2.EXEC<
3.<
DM支持多种调用方式
创建存储函数
存储函数名定义>
]})]
RETURN<
[WITHENCRYPTION]AS|IS
BEGIN
撤销存储函数
DROPFUNCTION<
调用存储函数
SELECT<
PLSQL支持的结构
1.顺序结构;
2.分支结构,包括条件、循环结构等;
3.迭代结构,包括子过程、子函数的调用。
语句块结构
DECLARE
EXCEPTION
语法格式:
[{DECLARE<
变量说明>
}]
END
DMPL/SQL基本的程序单元;
一个语句可以当作一个整体SQL语句对待,允许嵌套,可出现在SQL语句能出现的任何地方。
赋值语句
variable:
=expression;
给对象赋值;
1.<
赋值对象>
:
=<
值表达式>
2.SET<
需要注意的是,使用第2种形式时,不需要冒号“:
”。
DM支持多种赋值方式
变量定义
variabledata_type
[:
=|DEFAULT]default_value;
1.在语句块的说明部分可以定义变量、游标、异常变量、子过程或子函数;
2.需要强调的一点是,一个语句块意味着一个作用域范围,也就是说,在一个语句块的说明部分定义的任何对象,其作用域就是该语句块;
3.暂不支持缺省值的定义。
ORACLE支持缺省值;
DM不支持缺省值;
返回语句
RETURN;
结果值>
1.结束存储模块的运行,将控制返回给调用者;
2.如果从函数返回,同时返回函数的结果。
退出循环
EXIT[WHENcondition];
1.EXIT与循环语句一起使用,用于终止循环语句的执行,将控制转移到循环语句的下一个语句;
2.可以无条件终止循环语句;
3.可以带条件终止循环语句,当检测条件满足时才执行EXIT语句。
IF语句
IF<
condition1>
THEN
performaction1>
[ELSIF<
condition2>
performaction2>
…
conditionN>
performactionN>
[ELSE
performdefaultaction>
ENDIF;
根据布尔表达式的值,进行程序的分支控制;
条件表达式>
[{ELSEIF|ELSIF<
}]
[ELSE<
注意:
ELSEIF与ELSIF两种写法。
DM支持两种语法标记
循环语句
1.WHILE
WHILE<
condition>
LOOP
statement1>
statement2>
]...
ENDLOOP;
2.LOOP
[<
label>
>
]
LOOP
statements
ENDLOOP[label];
2FOR
FOR循环计数器IN[REVERSE]下限..上限LOOP
要执行的语句;
5.FOR_QUERY
FORloop_nameIN<
select_statement>
]…
1.LOOP:
循环执行,直至EXIT语句终止;
CREATEORREPLACEPROCUDUREP2
AS
AINT;
A:
=0;
IFA>
10THEN
EXIT;
ELSE
=A+1;
ENDIF;
ENDLOOP;
2.WHILE:
循环检测执行条件,为TRUE时执行,否则退出;
CREATEORREPLACEPROCEDUREP3
=10;
WHILEA>
0LOOP
=