oracle中procedures_个人拙见啥意思

oracle中procedures_个人拙见啥意思初看之下不免诧异,这不是一样的嘛,这也能赚到钱? 看看procedure要注意什么?没有return。 再看function要注意什么?有return。 啊这,下面要讲讲返回参数和return。 这二

Oracle procedure与function的个人拙见

初看之下不免诧异,这不是一样的嘛,这也能赚到钱?

 

看看procedure要注意什么?没有return。

再看function要注意什么?有return。

 

啊这,下面要讲讲返回参数和return。 

这二者的区别在于,return只返回一个值,返回参数却是可以有多个。

 

看看获取返回参数的方式:把变量放到返回参数的位置。

再看return的获取方式,跟赋值差不多。

这能看出什么?想要获取存储过程的返回值,需要有变量来存储,而return呢,则类似于x=1 + 2;无论我用不用x来存储,1+2都等于3。

 

根据上面的信息个人认为:

对于一些需要计算的,只需要获取单个值的需求,使用function;

对于一些不需要计算的,需要的获取多个值的需求,使用procedure;

 

以Scott模式为例,要求输入部门号,返回部门名部门员工avg(sal).

这里要求获取多个返回值,建议使用procedure。

create or replace procedure my_produre(vdeptno in emp.deptno%type,sdname out dept.dname%type,savg_sal out emp.sal%type)
as
begin
select dname,avg(sal) into sdname,savg_sal from emp e,dept d where e.deptno=vdeptno and e.deptno=d.deptno group by dname; 
end;
/

 

调用的话,把变量放到返回参数的位置以获取返回值

declare
vdname dept.dname%type;
vavg_sal emp.sal%type;
begin
my_produre(10,vdname,vavg_sal);
dbms_output.put_line("部门名:"||vdname||"    平均工资:"||vavg_sal);
end;
/

 

 

再来个,计算个人应交税,(网上搜的,不知道正确与否)

年不超过36k的:3%

36k到144k的:10%

144k到300k的:20%

超过300k的:25%

根据输入的员工号,获取年应交税。

 一般需要计算,并且返回一个计算结果的,个人认为使用函数比较好。

create or replace function my_fun(vempno in emp.empno%type)
return emp.sal%type
as
vsal emp.sal%type;
begin
select
case
when sal*12<=36000 then sal*12*0.03
when sal*12 between 3600 and 144000 then sal*12*0.1
when sal*12 between 144000 and 300000 then sal*12*0.2
else sal*12*0.25
end 
into vsal
from scott.emp where empno=vempno;
return vsal;
end;
/

调用的话可以直接调用,并不是说要给变量赋值才能调用。

exec dbms_output.put_line(my_fun(7839));

附:dbms_output.put_line没有显示输出结果的话,可以试试set serveroutput on

 

原文地址:https://www.cnblogs.com/wfkfytmy/archive/2022/08/03/16545711.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4929.html

(0)
上一篇 2023-05-30
下一篇 2023-05-30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注