如果只有一個返回值就用存儲函數,否則,就用存儲過程
存儲過程存儲函數都是存儲在數據庫中供所有用戶程序調用的子程序。他們的區別就在於是否用return 語句返回值
存儲過程:
--創建一個帶參數的存儲過程
--給指定的員工漲100塊的工資,並且打印漲前和漲后的工資
CREATE OR REPLACE PROCEDURE SALARY (inno IN NUMBER,inzhang in number,zongshu out number )
AS
PSAL EMP.SAL%TYPE;--定義一個變量存儲漲前的薪資
BEGIN
select sal into psal from emp where no = inno;--得到員工漲工資前的
update emp set sal = sal+ inzhang where no = inno;--給員工漲工資
commit;
select sal into zongshu from emp where no = inno;
dbms_output.put_line('漲前:'||psal||'漲后:'||(psal+inzhang));
END;
調用該存儲過程:
declare
inno number;
inzhang number;
zongshu number;
begin
inno :=3;
inzhang :=10;
salary(inno,inzhang,zongshu);
end;
存儲函數:
語法:CREATE OR REPLACE FUNCTION 函數名(參數列表)
return 函數值類型;
as
PLSQL子程序體;
--存儲函數:查詢某個員工的年收入
CREATE OR REPLACE FUNCTION CHAXUN(inno in number)
return number
as
psal emp.sal%type;--存放工資
pcomm emp.comm%type;--存放獎金
begin
select sal,comm into psal,pcomm from emp where inno = no;--獲取薪水和獎金
return psal*12+nvl( pcomm,0); --函數與過程的結構類似,但是必須要有一個return子句,用來返回函數值
end:
/
in和out參數:過程和函數都可以通過out 指定一個或者是多個輸出參數,我們可以利用out參數,在過程和函數中直線返回多個值。
--out參數實現查詢員工姓名,月薪和職位
CREATE OR REPLACE PROCEDURE CHAXUNDUOGE (INNO IN NUMBER;OUTNAME OUT CHAR(12);OUTSAL OUT CHAR(12);OUTJOB OUT CHAR(20))
AS
begin
select name,sal,job into OUTNAME,OUTSAL,OUTJOB from emp where no = inno;
end;
/