【Oracle数据库】存储函数

本文介绍了Oracle数据库中的存储函数,强调了其与存储过程的区别,主要使用场景是当有返回值时。内容包括如何创建无参、输入参数、输出参数及输入输出参数的存储函数,并给出了相应的示例操作,同时讲解了删除存储函数的语法。

作用和存储过程一致,原则上有一个返回值的时候,用存储函数,否则其他情况都用存储过程
存储过程是create procedures
存储函数是create function(函数),且必须要有返回值,return

无参

  • 创建无参存储函数
create or replace function func1
return varchar2

is
begin
       return 'hello world!';
end;

create or replace function func11
return varchar2
is
begin
  return 'hello   world!';
end;
  • 执行无参存储函数
begin
dbms_output.put_line(func1);
end;

begin 
  dbms_output.put_line(func11);
end;

输入参数

创建输入参数的存储函数

  • 根据部门编号,返回部门的总工资
create or replace function func2
(v_deptno in number)
return number
is
       v_sumsal number;
begin
       select sum(sal) into v_sumsal from emp where deptno = v_deptno;
       return v_sumsal;
exception
       when no_data_found then 
       dbms_output.put_line('没有此部门');
       when others then 
       dbms_output.put_line('sqlerro');
end;
  • 执行输入参数的存储函数
begin
dbms_output.put_line(func2(&no));
end;


begin
  dbms_output.put_line(func02(&no));
end;

输出参数

– 创建输出参数的存储函数

  • 根据员工的工号输出员工的姓名和工资,并且返回员工的年收入
create or replace function func3
(v_empno in emp.empno%type,v_ename out emp.ename%type ,v_sal out emp.sal%type )
return number
is

       v_sumsal number;
begin
       select ename,sal,(sal+nvl(comm,0))*12 into v_ename,v_sal,v_sumsal from emp where empno = v_empno;
       return v_sumsal;
exception
       when no_data_found then
       dbms_output.put_line('没有找到部门编号');
       when others then
       dbms_output.put_line(sqlerrm);
       
end;
  • 执行输出参数的存储函数
declare

v_ename emp.ename%type;
v_sal emp.sal%type;
v_sumsal number;

begin

v_sumsal := func3(&empno,v_ename,v_sal);
dbms_output.put_line(v_sumsal||'====='||v_sal||'===='||v_ename);

end;

输入输出

–创建带有输入输出单数的存储函数

  • 求两个数的平方和,并输出两个数的平方
create or replace function func04
(n1 in out number,n2 in out number)
return number
is
begin
  n1:=n1*n1;
  n2:=n2*n2;
  /*调用func04返回的结果*/
  return n1+n2;
end;
  • 执行输入输出参数的存储函数
declare
n1 number:=&n1;
n2 number:=&n2;
nsum number;
begin
  /*给nsum赋值func04*/
  nsum:=func04(n1,n2);
  dbms_output.put_line(nsum||'===='||n1||'===='||n2);
end;

删除

–删除存储函数

  • 语法:drop function + 存储过程名
    drop function v_func;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值