首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PL/SQL的函数和存储过程

PL/SQL的函数和存储过程

PL/SQL的函数(Function)和存储过程(Procedure),可以理解为匿名块(Anonymous Block)的升级版,函数和存储过程就是编译成数据库对象的匿名块。它们相对于匿名块,具有以下优点:

1、编译一次,方便在数据库对象中查找,可以多次重复使用。

2、可以处理输入和输出的参数。

3、可以逐条语句执行进行测试。

一、函数(Function)

函数的编写格式如下:

函数的编写,有几个需要注意的地方:

1、定义函数输入参数时,可以省略“in”关键字,即:fnPlusAB(paramA integer,paramB integer,……)。

2、定义函数输出参数时,必须带有“out”关键字,即:fnPlusAB(……,paramC out varchar2)。

3、函数必须定义返回值类型,并且,在begin和end之间的语句,必须有返回值,即return xxx。

4、如果begin和end之间的语句包含if条件语句或for循环语句等,必须考虑到每一个分支,都有一个返回值,即return xxx。

在调用函数时,需要注意,必须有一个变量或值来接收函数的返回值,如下两种格式:

1、条件判断

if fnPlusAB(1,2,p_Msg)=3 then

......

end if;

在这段语句中,函数返回值是3,因此if条件语句通过判断,且p_Msg输出参数值为'A+B=3'。

2、变量赋值

l_C:=fnPlusAB(1,2,p_Msg);

在这段语句中,函数返回值是3,因此l_C接收返回值,变为3,且p_Msg输出参数值为'A+B=3'。

如果没有一个变量或值来接收函数的返回值,那么是无法调用函数的,例如如下的错误示例:

fnPlusAB(1,2,p_Msg);

二、存储过程(Procedure)

存储过程的编写格式类似于函数,但也有一些不同,示例如下:

存储过程的编写,有几个需要注意的地方:

1、定义存储过程参数时,与函数类似,可以省略“in”关键字,不能省略“out”关键字。

2、存储过程不能定义返回值类型,而且在begin和end之间的语句不能包含return xxx。

在调用存储过程时,由于没有返回值,可以直接传入参数调用即可:

pcPlusAB(1,2,p_Msg);

由于没有返回值,该存储过程执行完成后,只是将p_Msg输出参数值改为'A+B=3'。

经过以上的对比,函数和存储过程唯一的区别就是有没有返回值,因此在选择的时候可以根据实际情况,需要返回值则选择函数,不需要则选择存储过程。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180123G0CR5L00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券