Oracle procedure与function的个人拙见

打印 上一主题 下一主题

主题 1019|帖子 1019|积分 3057

初看之下不免诧异,这不是一样的嘛,这也能赚到钱?
 
看看procedure要注意什么?没有return。
再看function要注意什么?有return。
 
啊这,下面要讲讲返回参数和return。 
这二者的区别在于,return只返回一个值,返回参数却是可以有多个。
 
看看获取返回参数的方式:把变量放到返回参数的位置。
再看return的获取方式,跟赋值差不多。
这能看出什么?想要获取存储过程的返回值,需要有变量来存储,而return呢,则类似于x=1 + 2;无论我用不用x来存储,1+2都等于3。
 
根据上面的信息个人认为:
对于一些需要计算的,只需要获取单个值的需求,使用function;
对于一些不需要计算的,需要的获取多个值的需求,使用procedure;
 
以Scott模式为例,要求输入部门号,返回部门名部门员工avg(sal).
这里要求获取多个返回值,建议使用procedure。
  1. create or replace procedure my_produre(vdeptno in emp.deptno%type,sdname out dept.dname%type,savg_sal out emp.sal%type)
  2. as
  3. begin
  4. 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; <br>end; <br>/
复制代码
 
调用的话,把变量放到返回参数的位置以获取返回值
  1. declare
  2. vdname dept.dname%type;
  3. vavg_sal emp.sal%type;
  4. begin
  5. my_produre(10,vdname,vavg_sal);
  6. dbms_output.put_line('部门名:'||vdname||'    平均工资:'||vavg_sal);
  7. end;
  8. /
复制代码
 
 
再来个,计算个人应交税,(网上搜的,不知道正确与否)
年不超过36k的:3%
36k到144k的:10%
144k到300k的:20%
超过300k的:25%
根据输入的员工号,获取年应交税。
 一般需要计算,并且返回一个计算结果的,个人认为使用函数比较好。
[code]create or replace function my_fun(vempno in emp.empno%type)return emp.sal%typeasvsal emp.sal%type;beginselectcasewhen sal*12
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表