oracle学习笔记(第十章:自定义函数)

本文详细介绍如何在Oracle数据库中创建函数,包括语法格式、注意事项及示例。解释了函数与过程的区别,并介绍了如何检索已创建的存储过程源代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建语法格式:
Create Or Replace Function fun_name(arg1 in datatype default v_value,arg2 out datatype default v_value,…)
Return datatype
As
--在此定义变量
Begin
--函数具体过程;

Return (v_return_value);--这里的括号可有可无

End fun_name; --这里的函数名称可有可无

说明:
1,function 返回值必须有,且被呼叫时须为表达式的一部份
2,参数可由function 中传进传出
3,可于PL/SQL表达式和 SQL 叙述中使用
4,最好不要用 stored function 传回多个值
5,如果函数没有参数,则不需要括号,调用时括号可有可无
6,in 和 out 以及 in out 模式参数,如果省略,则默认是 in,参数可以有默认值(default)
7,在调用function或procedure时out模式参数将被初始化为null
8,[ or replace ] 表示可以重复编译,可以省略
9,参数的数据类型不需加长度限制
10,END后的函数名称可以省略
11,用户自定义函数可以像系统函数一样在select语句中调用,但是该函数必须满足纯层的要求
关于纯层(purity level):定义了函数所能读或修改的数据结构,函数有四个纯层:
WNDS 不能写数据库状态  函数不能修改任何数据库表( 使用DML语句)
RNDS 不能读数据库状态 函数不能读数据库表(使用select语句)
WNPS 不能写包状态 函数能修改任何数据库表(变量不能出现在赋值语句的左边以及fetch语句中)
RNPS 不能读包状态 函数不能使用任何包变量(包变量不能出现在赋值语句的右边或作为过程的一部分,以及SQL表达式中)


例子1:
create or replace function test_fun(vemp_no in char)-------------此处变量不能加长度
return varchar2 --一定要有返回值﹐此处无分号
as
vemp_name varchar2(10);-------------此处变量要加长度
begin
select emp_nm into vemp_name from empm where emp_no=vemp_no;
return(vemp_name);
end test_fun;

例子2:
create or replace function fun(vemp_no in CHAR)
return empm%rowtype – 可以返回一行值
as
lyj_rec emp_m%rowtype;
begin
select * INTO lyj_rec from emp_m where emp_no=vemp_no;
return lyj_rec;
end;


function 与 procedure 的比较
--都可以通过使用out参数返回一个以上的值
--当返回多个值时,用procedure较好
--当返回一个值时,用function较好
--function可以在sql语句中调用,而procedure则不可

-------------检索存储过程
-------------Oracle中有个系统视图﹕user_source﹐它提供以下4个列
-------------Name:包括存储过程﹐函数﹐包或包体的名称
-------------Type﹕指出源代码是否属于存储过程﹐函数还是包体
-------------Text:包含源代码的一行
-------------Line﹕包含在Text中源代码中所包含的函数
----例子检索存储过程test_pro4的源代码
select line,text from user_source where name='test_pro2' order by line;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值