編程開發之--Oracle數據庫--存儲過程和存儲函數(1)


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 number
as
  --定義一個變量保存員工的薪水和獎金
  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、使用存儲過程和使用存儲函數的一條簡單非必要原則:如果只有一個返回值,使用存儲函數的return子句返回;如果有多個返回值,則使用存儲過程通過out參數返回。

create or replace PROCEDURE queryempinform(eno in number,
                                           pename out varchar2,
                                           psal out number,
                                           pjob out varchar2)
as
begin
  --得到員工的姓名、月薪、職位
  select ename,sal,job into pename,psal,pjob from emp where empno=eno;
end;

  問題思考:

        a)如果查詢某人的所有字段信息(並且字段比較多),該如何解決?

        b)如何返回多條符合條件的結果集,out參數可以返回結果集嗎?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM