函数
函数一般用于计算和返回一个值,可以将经常需要进行的计算写成函数。函数的调用是表达式的一部分,而过程的调用是一条PL/SQL语句。
函数与过程在创建形式上有些相似,也是编译后放在内存中供用户使用,只不过调用时函数要用表达式,而不像过程只需调用过程名。另外,函数必须有一个返回值,而过程则没有。
创建函数
创建函数的语法和创建存储过程的语法也很相似。它们在数据库内采用相同的规则,参数的传递也相同。
创建函数的基本语法如下:
CREATE [OR REPLACE] FUNCTION function_name
[parameter1 [IN|OUT|IN OUT]data_type1,
parameter2 [IN|OUT|IN OUT]data-type2,
......]
RETURN data_type;
IS|AS
声明部分
BEGIN
执行部分
EXCEPTION
异常处理部分
END [function_name];
在语法结构上,定义存储过程和函数的区别主要有两处:
- 一是函数有RETURN数据类型子句,用于指定函数返回值的数据类型;
- 二是在函数体内,用户可以在任何地方使用RETURN语句返回值,其返回值的数据类型必须是函数头中声明的,并且执行RETURN语句后函数将返回,不再执行下面的语句。
示例:创建函数用于求两个数的平均值
create or replace function f_avg(num1 in number,num2 in number)
return number as
result_avg number;
begin
result_avg :=(num1 + num2)/2;
return result_avg;
end f_avg;
/
创建函数之后就可以在需要时调用,调用函数与调用过程不同。调用函数时需要一个变量来保存函数的返回的结果值,这样函数就组成了表达式的一部分。这也就意味着,函数不能像调用过程那样独立地调用。
使用匿名程序块中调用函数f_avg()获取两个数的平均值:
创建函数用于计算选修某门课程的学生人数
create or replace function f_count(c_name in varchar2) return number
as resultCount number;
begin
select count(distinct s.Sno) into resultCount
from student s,course c,sc sc
where s.Sno=sc.Sno and c.Cno=sc.Cno and c.Cname=c_name;
return(resultCount);
end f_count;
/
调用函数
函数声明时所定义的参数成为形式参数,应用程序调用时为函数传递的参数称为实际参数。实际参数和形式参数之间的数据传递有两种方法: 传址法和传值法 。
调用函数和调用过程有所不同,需要一个变量来保存返回的值,这样函数就组成了表达式的一部分。因此不能像调用过程那样独立地调用函数。
删除函数
对于不再使用的函数,可以使用DROP FUNCTION语句进行删除,语法如下:
DROP FUNCTION <function_name>;
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。