PL/SQL之函数

PL/SQL之函数

一 引言

ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数 。过程和函数统称为 PL/SQL 子程序,他们是被命名的 PL/SQL 块,均存 储在数据库中,并通过输入、输出参数或输入 输出参数与其调用者交换信息。 过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据

二 创建并调用函数

1 创建内嵌函数
(1)语法如下:

说明:

  1. OR REPLACE 为可选 . 有了它 , 可以或者创建一个新函数或者替换相同名字的函数 , 而不会出现冲突
  2. 函数名后面是一个可选的参数列表 , 其中包含 IN, OUT 或 IN OUT 标记 . 参数之间用逗号隔开 . IN 参数标记表示传递给函数的值在该函数执行中不改变 ; OUT 标记表示一个值在函数中进行计算并通过该参数传递 给调用语句 ; IN OUT 标记表示传递给函数的值可以变化并传递给调用语句 . 若省略标记 , 则参数隐含为 IN 。
  3. 因为函数需要返回一个值 , 所以 RETURN 包含返回结果的数据类型
CREATE OR REPLACE ] FUNCTION function_name
	[ (argment [ {IN | IN OUT }]Type,
	 argment [ { IN | OUT | IN OUT } ] 	Type ]
	[ AUTHID DEFINER | CURRENT_USERR ]
	RETURN return_type
{IS | AS }
	<类型 变量的说明>
BEGIN
	FUNCTION_body
EXCEPTION
	其它语句
END

(2) 案例
① 不带参数的函数
在这里插入图片描述
执行该函数:
在这里插入图片描述
② 获取某部门的工资总和
在这里插入图片描述
执行该函数:
在这里插入图片描述

2 内嵌函数的调用
函数声明时所定义的参数称为形式参数,应用程序调用时为函数传递的参数称为实际参数。应用程序在调用函数时,可以使用以下三种方法向函数传递参数:
① 第一种参数传递格式称为位置表示法 ,格式为

argument_value1[,argum ent_value2 …]

案例:计算某部门的工资总和
在这里插入图片描述
② 第二种参数传递格式称为名称表示法 ,格式为
其中:argument 为形式参数,它 必须与函数定义时所声明的形式参数名称相同 。 Parameter 为实际参数。在这种格式中,形势参数与实际参数成对出现,相互间关系唯一确定,所以参数的顺序可以任意排列。

argument => parameter [,]

案例:计算某部门的工资总和
在这里插入图片描述
③ 第三种参数传递格式称为混合表示法
即在调用一个函数时,同时使用位置表示法和名称表示法为函数传递参数
。采用这种参数传递方法时,使用位置表示法所传递的参数必须放在名称表示法所传递的参数前面 。也就是说,无论函数具有多少个参数,只要其中有一个参数使用名称表示法,其后所有的参数都必须使用名称表示法。
案例:计算某部门的工资总和
在这里插入图片描述
无论采用哪一种参数传递方法,实际参数和形式参数之间的数据传递只有两种方法:传址法和传值法 。所谓传址法是指在调用函数时, 将实际参数的地址指针传递给形式参数 使形式参数和实际参数指向内存中的同一区域 ,从而实现参数数据的传递。这种方法又称作参照法,即形式参数参照实际参数数据。 输入参数均采用传址法传递数据
传值法是指将实际参数的数据拷贝到形式参数, 而不是传递实际参数的地址。默认时, 输出参数和输入 输出参数均采用传值法 。在函数调用时, ORACLE 将实际参数数据拷贝到输入 输出参数,而当函数正常运行退出时,又将输出形式参数和输入 输出形式参数数据拷贝到实际参数变量中。

3 参数默认值
在CREATE OR REPLACE FUNCTION 语句中声明函数参数时 可以使用 DEFAULT 关键字为输入参数指定默认值 。
在这里插入图片描述
具有默认值的函数创建后,在函数调用时,如果没有为具有默认值的参数提供实际参数值,函数
将使用该参数的默认值。但当调用者为默认参数提供实际参数时,函数将使用实际参数值。在创建函数时, 只能为输入参数设置默认值,而不能为输入 输出参数设置默认值
在这里插入图片描述

三 删除函数

可以使用DROP FUNCTION 命令对不需要的函数进行删除,语法如下:

DROP FUNCTION [user.]Function_name;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值