DM存储过程和存储函数

一、DM存储过程和存储函数的异同

相同点:

1.封装性:存储过程和存储函数都可以封装一系列的SQL语句和逻辑代码,隐藏内部实现细节,使得代码更易于管理和维护。

2.可重用性:一旦定义,存储过程和存储函数就可以在数据库中被多次调用,而不需要重复编写相同的代码。

3.参数传递:它们都可以接受参数,并根据参数执行相应的操作。这些参数可以是输入参数、输出参数或既是输入又是输出的参数。

4.减少网络通信:存储过程和存储函数在数据库服务器上执行,可以减少客户端和服务器之间的网络通信量,因为SQL语句和相关逻辑是在服务器端处理的。

5.提高性能:通过预编译和优化执行计划,存储过程和存储函数可以提高数据库操作的性能。

6.安全性:通过限制对存储过程和存储函数的访问权限,可以增强数据库的安全性,防止用户直接访问或修改基础数据。

不同点:

1.关键字:存储过程关键字是PROCEDURE,存储函数关键字是FUNCTION。

2.返回值:存储函数可以返回一个值或表对象(必须用return结束),这个值可以在SQL语句中直接使用。而存储过程不直接返回值,它主要通过参数传递来实现数据的输出,可以返回参数(如记录集),或者只是实现某种效果或动作而无需返回值。

3.调用方式:存储过程一般是作为一个独立的部分来执行(通常使用CALL语句执行),它不能嵌入到SQL语句中。而存储函数可以作为查询语句的一个部分来调用(通常在SELECT语句中调用),它可以在SQL语句中直接使用。

4.参数类型:存储过程的参数类型有三种,分别是IN(输入参数)、OUT(输出参数)和INOUT(输入输出参数)。而存储函数的参数类型通常只有IN(输入参数),用于传递数据给函数。

5.功能用途:存储过程通常用于执行一系列复杂的数据库操作,可以包含修改表、事务控制等语句,功能较为强大。而存储函数则更适用于计算和返回特定的值,通常用于封装一段特定的逻辑代码,以供其他程序调用。

6.使用限制:存储函数在编写时有一些限制,例如不能使用临时表,只能使用表变量等。而存储过程在这些方面的限制相对较少,可以更灵活地进行数据库操作。

二、DM存储过程

一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用。

语法:

CREATE [OR REPLACE ] PROCEDURE<过程声明><AS_OR_IS><模块体>

<过程声明> ::= <存储过程名定义> [WITH ENCRYPTION][(<参数名><参数模式><参数类型> [<默认值表达式>] {,<参数名><参数模式><参数类型> [<默认值表达式>] })][<调用权限子句> <存储过程名定义> ::=[<模式名>.]<存储过程名>

<AS_OR_IS>::= AS | IS

<模块体> ::= [<声明部分>]

BEGIN

<执行部分>

[<异常处理部分>]

END

简单例子:

在AA模式下创建一个存储过程P1,输入参数A和参数B,定义参数C=A*B。

create or replace procedure AA.P1(A INT,B INT)

IS

C INT ;

BEGIN

C:=A*B;

END;

存储过程本身没有返回值,调用AA.P1函数,只会提示执行成功。

call aa.p1(3,4);

在AA模式下创建一个存储过程P2,输入参数A和参数B,输出A*B乘积

create or replace procedure AA.P2(A INT,B INT)

IS

C INT ;

BEGIN

C:=A*B;

print(c);

END;

可以用print()打印输出,调用AA.P2函数,有输出12

call aa.p2(3,4);

三、DM存储函数

语法:

CREATE [OR REPLACE ] FUNCTION [IF NOT EXISTS] <函数声明> <AS_OR_IS> <模块体> 

<函数声明> ::= <存储函数名定义> [WITH ENCRYPTION][FOR CALCULATE][(<参数名><参数模式><参数类型> [<默认值表达式>]{,<参数名><参数模式><参数类型>[<默认值表达式>]})]RETURN <返回数据类型> [<调用选项子句>][PIPELINED] 

<存储函数名定义> ::=[<模式名>.]<存储函数名> 

<调用选项子句> ::= <调用选项> {<调用选项>} 

<调用选项> ::= <调用权限子句> | DETERMINISTIC

 <AS_OR_IS>::= AS | IS 

<模块体> ::= [<声明部分>] 

BEGIN 

<执行部分> 

[<异常处理部分>] 

END [存储函数名] 

简单例子:

在AA模式下创建一个存储过程F1,输入参数A和参数B,输出A*B乘积。

create or replace FUNCTION AA.F1(A INT,B INT) RETURN INT

IS

C INT ;

BEGIN

C:=A*B;

RETURN C;

END;

调用函数

SELECT AA.F1(3,4) FROM DUAL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值