標籤:mpi func 調試 實值型別 image img 姓名 procedure 使用者
1、預存程序和儲存函數
描述:指儲存在資料庫中供所有使用者程式調用的子程式叫做預存程序、儲存函數
區別:儲存函數可以通過return子句返回一個函數的值
(1)預存程序
文法:create [or replace] PROCEDURE 過程名(參數列表)
AS
PLSQL子程式體;
預存程序的調用方式:
a)exec/execute 過程名();
b)begin
過程名();
過程名();
end;
/
帶參數的預存程序:
舉例:為指定的員工漲100塊錢工資,並且列印漲前以及漲後的工資。
在sql developer中建立帶參數的預存程序:
create or replace PROCEDURE raisesalary(eno in number)as --定義一個變數儲存漲前的薪水 psal emp.sal%type;begin --得到員工漲前的薪水 select sal into psal from emp where empno=eno; --給該員工漲100 update emp set sal=sal+100 where empno=eno; --注意:一般不在預存程序或者儲存函數中,commit和rollback。 --列印 DBMS_OUTPUT.PUT_LINE(‘漲前:‘||psal||‘漲後:‘||(psal+100));end;/
使用sql developer調試調用plsql程式:
如果缺少許可權,可以使用資料庫超管賦予目前使用者許可權:
(2)儲存函數
文法:
create [or replace] FUNCTION 函數名(參數列表)
return 函數實值型別
AS
PLSQL子程式體;
舉例:查詢某員工的年度營收
create or replace FUNCTION queryempincome(eno in number)return numberas --定義一個變數儲存員工的薪水和獎金 psal emp.sal%type; pcomm emp.comm%type;begin --得到員工的月薪和獎金 select sal,comm into psal,pcomm from emp where empno=eno; --直接返回年度營收 return psal*12+nvl(pcomm,0);end;/
2、使用預存程序和使用儲存函數的一條簡單非必要原則:如果只有一個傳回值,使用儲存函數;如果有多個傳回值,則使用預存程序;
都可以有多個out參數!
create or replace PROCEDURE queryempinform(eno in number, pename out varchar2, psal out number, pjob out varchar2)asbegin --得到員工的姓名、月薪、職位 select ename,sal,job into pename,psal,pjob from emp where empno=eno;end;
問題思考:
a)如果查詢某人的所有欄位資訊(並且欄位比較多)?
b)如何返回多條合格結果集,out參數可以返回結果集嗎?
編程開發之--Oracle資料庫--預存程序和儲存函數(1)