Oracle存储过程和函数的比较

比较1

创建存储过程的关键字是: procedure

创建函数的关键字是: function

 

比较2

存储过程的调用方式: 独立的调用语句,如:

begin

  proc1;

end;

函数的调用方式: 以表达式方式调用,如:

declare 

  v_result number;

begin

  v_result := func1;

end;

 

比较3

函数通过return语句返回函数值.

存储过程没有.

 

比较4

存储过程的目的: 完成一系列的数据处理.

函数的目的: 获得函数的返回值.

 

比较5

存储过程和函数都可以有一个或多个out(输出)参数.

存储过程可以通过out参数来实现返回值.

 

一般原则:

如果只有一个返回值,用函数处理.

 

比较6:

参数默认值:

存储过程和函数都可以在声明参数时,使用default关键字为输入参数指定默认值.

实例: 求部门的年收入

--求部门的年收入 
create or replace function five_func
(
  v_deptno in number default 10
)

return number

is
  v_sumsal number;
begin
  select sum((sal+nvl(comm,0))*12)
  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(sqlerrm);
end;


--调用
declare
  v_sumsal number;
begin
  v_sumsal := five_func; --因为在创建函数时指定默认值,所有可以不传参数
  dbms_output.put_line(v_sumsal);
end;

结果为: 105000

 

如果除了默认值以外还有其他参数,则可以使用 关联符号(=>) 为指定的参数赋值

对上面的例子做一个修改,除了默认参数外,再传入一个参数,并为指定的参数赋值.


--求部门的年收入 
create or replace function five_func
(
  v_deptno in number default 10,
  v_test in number
)

return number

is
  v_sumsal number;
begin
  select sum((sal+nvl(comm,0))*12)
  into v_sumsal
  from emp
  where deptno = v_deptno;
  
  dbms_output.put_line('测试:' || v_test);--打印出传入的非默认值参数
  
  return v_sumsal;
  
  exception
    when no_data_found then
      dbms_output.put_line('没有此部门!');
    when others then
      dbms_output.put_line(sqlerrm);
end;


--调用
declare
  v_sumsal number;
begin
  v_sumsal := five_func(v_test => 1);--在创建函数时为第一个参数指定了默认值,第一个参数可以不传
  dbms_output.put_line(v_sumsal);
end;

结果:

测试:1
105000
 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值