初看之下不免詫異,這不是一樣的嘛,這也能賺到錢?
看看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.uj5u.com/shujuku/500869.html
標籤:Oracle
下一篇:Redis常用操作
