Oracle存储函数

Oracle存储函数

存储函数也是一个命名了的PLSQL块。

--注意: 存储过程是没有返回值,但是存储函数有返回值。
存储过程和存储函数的区别
一般来讲,过程和函数的区别在于函数可以有一个返回值;
而过程没有返回值。

但过程和函数都可以通过 out 指定一个或多个输出参数。

我们可以利用 out 参数,在过程和函数中实现返回多个值。
create or replace function 函数名称 (参数1 in|out 参数类型,参数2 in|out 参数类型)

return 数据类型

is|as
       --定义变量
begin
       --程序体
       return(结果变量);
end[函数名];
--创建一个存储函数
create or replace function fun_001 
return varchar2 
as
begin
 return '创建一个存储函数';
end;

调用函数

--方式一:在select语句中调用存储函数
select fun_001 from dual;
--方式二:PLSQL块中调用存储函数
declare
  --声明一个变量用于接收存储函数的返回值
  p_temp varchar2(50);

begin
  --将存储函数的返回值赋给变量
  p_temp := fun_001;
  dbms_output.put_line(p_temp);
end;
--查询某个员工的年薪
create or replace function fun_emp_year_sal(eno in number)
return number
as
   --接收年薪
   yearsal number;
begin
   select round((sal *12)+nvl(comm,0),2) into yearsal from emp where empno = eno;
   --必须有返回值
   return yearsal;
end;

--调用函数
declare
   ysal number;
begin
   ysal := fun_emp_year_sal(7369);
   dbms_output.put_line('年薪是:'||ysal);
end;
--存储函数的返回值只能够有一个值,如果要返回多个值就要借助于输出参数。
--使用存储过程 实现查询员工的年薪
--编写存储过程
create or replace procedure pro_emp_year_sal(eno number,totalsal out number)
as

begin
    -- 查询年薪
    select round((sal *12)+nvl(comm,0),2) into totalsal from emp where empno = eno;

end;

--调用存储过程
declare
   --定义变量接收值
   dd number;
begin
   pro_emp_year_sal(7369,dd);
   dbms_output.put_line('存储过程查询年薪:'||dd);
end;

删除函数

drop functioin 函数名;

存储过程和存储函数的区别

--1)返回值:存储过程是没有返回值;存储函数是有返回值;

--2)使用方式:存储函数一般在SQL语句中使用;存储函数可以写在select语句中,存储过程不行
--而存储过程一般单独使用;

--3)用途:存储函数实现计算并返回计算的结果;而存储过程一般用来实现一些特定的功能;
--存储函数:根据部门编号查询部门名称
create or replace function fun_find_dname_by_dno(dno number)
return varchar2
as
   ddname varchar2(200);
begin
   select dname into ddname from dept where deptno = dno;
   return ddname;
end;

--在select语句中使用函数
select e.* ,fun_find_dname_by_dno(e.deptno) 部门名称,fun_emp_year_sal(e.empno)  年薪
from emp e;
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值