
Oracle 存储过程和存储函数
发布日期:2021-05-07 19:44:25
浏览次数:25
分类:精选文章
本文共 2015 字,大约阅读时间需要 6 分钟。
存储过程与存储函数入门
存储过程和存储函数是Oracle数据库中的重要工具,用于提高数据库性能和代码复用性。本文将从基础到进阶,详细介绍这两者,包括它们的区别、使用场景以及实际操作案例。
一、存储过程
存储过程是一组预编译好的SQL语句,存储在数据库中,可通过名称调用。与SQL语句不同,存储过程可以重复执行,能够显著提升数据库性能。以下是创建存储过程的基本语法和示例。
创建存储过程的语法
CREATE OR REPLACE PROCEDURE procedure_name [ (参数名 在/out 数据类型) ] isbegin -- 存储过程体end;
实际操作示例
创建一个输出“Hello World”的存储过程
CREATE OR REPLACE PROCEDURE hello_worldisbegin dbms_output.put_line('Hello World!');end;
使用存储过程进行操作
declare procedure_name procedure_name;begin hello_world;end;
范例2:给指定员工涨100工资
CREATE OR REPLACE PROCEDURE p1(eno emp.empno%type)isbegin update emp set sal = sal + 100 where empno = eno; commit;end;select * from emp where empno = 7788; -- 测试p1
二、存储函数
存储函数是与存储过程类似的概念,但具有返回值特性。它可以将复杂逻辑封装为一个函数,并返回结果。以下是存储函数的关键特点及其使用案例。
存储函数与存储过程的区别
- 语法:存储函数多了
return
关键字。 - 本质:存储函数有返回值,而存储过程没有。通过
out
参数,存储过程可以实现类似返回值的功能。
使用存储函数进行计算
计算指定员工的年薪
CREATE OR REPLACE FUNCTION f_yearsal(eno emp.empno%type) RETURN numberis s number(10); begin select sal * 12 + nvl(comm, 0) into s from emp where empno = eno; return s; end;
调用存储函数
declare s number(10);begin s := f_yearsal(7788); dbms_output.put_line(s);end;
三、in和out类型参数
in
参数用于输入数据,out
参数用于输出数据。out
参数必须用于那些需要返回结果的存储过程或函数。
计算员工年薪的存储过程
CREATE OR REPLACE procedure p_yearsal(eno emp.empno%type, yearsal out number)is s number(10); c emp.comm%type; begin select sal * 12, nvl(comm, 0) into s, c from emp where empno = eno; yearsal := s + c; end;
调用存储过程
declare yearsal number(10);begin p_yearsal(7788, yearsal); dbms_output.put_line(yearsal);end;
四、存储过程与存储函数的区别
特性 | 存储过程 | 存储函数 |
---|---|---|
返回值 | 无 | 有 |
调用方式 | 使用call 或直接执行 | 使用call 或直接使用函数名 |
参数类型 | in/out均可 | in可选,out可选 |
最终目的 | 执行复杂逻辑,提高性能 | 提供函数服务,简化调用 |
使用存储函数实现部门名称查询
CREATE OR REPLACE function fdna(dno dept.deptno%type) RETURN dept.dname%typeis dna dept.dname%type; begin select dname into dna from dept where deptno = dno; return dna; end;
查询员工信息并获取部门名称
select e.ename, fdna(e.deptno) from emp e;
五、总结
存储过程和存储函数是Oracle数据库中的强大工具。通过学习这些概念,你可以显著提升数据库性能,实现代码复用,并简化数据库操作流程。选择使用哪种工具取决于你的需求,如果需要返回值,存储函数是一个更好的选择;如果需要执行复杂逻辑操作,存储过程则是更合适的选择。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月08日 07时26分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
云计算之路-阿里云上:博客web服务器轮番CPU 100%
2019-03-06
云计算之路-阿里云上:服务器CPU 100%问题是memcached连接数限制引起的
2019-03-06
上周热点回顾(3.26-4.1)
2019-03-06
上周热点回顾(6.25-7.1)
2019-03-06
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
2019-03-06
工作半年的思考
2019-03-06
不可思议的纯 CSS 滚动进度条效果
2019-03-06
【CSS进阶】伪元素的妙用--单标签之美
2019-03-06
惊闻NBC在奥运后放弃使用Silverlight
2019-03-06
IE下尚未实现错误的原因
2019-03-06
创建自己的Docker基础镜像
2019-03-06
Python 简明教程 --- 20,Python 类中的属性与方法
2019-03-06
KNN 算法-理论篇-如何给电影进行分类
2019-03-06
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2019-03-06
CODING 敏捷实战系列课第三讲:可视化业务分析
2019-03-06
工作动态尽在掌握 - 使用 CODING 度量团队效能
2019-03-06
CODING DevOps 深度解析系列第二课报名倒计时!
2019-03-06
数据结构第八节(图(下))
2019-03-06
基于Mustache实现sql拼接
2019-03-06
POJ 2260 Error Correction 模拟 贪心 简单题
2019-03-06