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数据库中的强大工具。通过学习这些概念,你可以显著提升数据库性能,实现代码复用,并简化数据库操作流程。选择使用哪种工具取决于你的需求,如果需要返回值,存储函数是一个更好的选择;如果需要执行复杂逻辑操作,存储过程则是更合适的选择。

上一篇:Oracle 触发器
下一篇:Oracle QL/SQL 的基本语法

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月08日 07时26分33秒