PL/SQL 儲存函數和預存程序

來源:互聯網
上載者:User

PL/SQL 儲存函數和預存程序

Oracle 提供可以把PL/SQL 程式儲存在資料庫中,並可以在任何地方來運行它。這樣就叫預存程序或函數。
過程和函數統稱為PL/SQL子程式,他們是被命名的PL/SQL塊,均儲存在資料庫中,並通過輸入、輸出參數或輸入/輸出參數與其調用者交換資訊。
過程和函數的唯一區別是函數總向調用者返回資料,而過程則不返回資料。

--------------------------------------分割線 --------------------------------------

rlwrap - 解決Linux下SQLPLUS退格、上翻鍵亂碼問題

SQLPLUS spool 到動態記錄檔名

Oracle SQLPLUS提示符設定

通過設定SQLPLUS ARRAYSIZE(行預取)加快SQL返回速度

PL/SQL Developer實用技巧分享

--------------------------------------分割線 --------------------------------------

①建立函數
1. 建立內嵌函數
文法如下:
CREATE[OR REPLACE] FUNCTION function_name
    [ (argment [ { IN| IN OUT }] Type,
    argment [ { IN| OUT| IN OUT} ] Type ]
    [ AUTHID DEFINER| CURRENT_USER ]
    RETURN return_type
{ IS| AS}
    <類型.變數的說明>
BEGIN
    FUNCTION_body
EXCEPTION
    其它語句
END;
說明:
1) OR REPLACE 為可選. 有了它, 可以或者建立一個新函數或者替換相同名字的函數, 而不會出現衝突
2) 函數名後面是一個可選的參數列表, 其中包含IN, OUT 或IN OUT 標記. 參數之間用逗號隔開.
    IN 參數標記表示傳遞給函數的值在該函數執行中不改變;
    OUT 標記表示一個值在函數中進行計算並通過該參數傳遞給調用語句;
    IN OUT 標記表示傳遞給函數的值可以變化並傳遞給調用語句. 若省略標記, 則參數隱含為IN。
3) 因為函數需要返回一個值, 所以RETURN 包含返回結果的資料類型.

2. 內嵌函數的調用
函式宣告時所定義的參數稱為形式參數,應用程式調用時為函數傳遞的參數稱為實際參數。應用程式在調用函數時,
可以使用以下三種方法向函數傳遞參數:
第一種參數傳遞格式稱為位置標記法,格式為:

第二種參數傳遞格式稱為名稱標記法,格式為:
argument => parameter [,…]
其中:argument 為形式參數,它必須與函數定義時所聲明的形式參數名稱相同。Parameter 為實際參數。
在這種格式中,形勢參數與實際參數成對出現,相互間關係唯一確定,所以參數的順序可以任意排列。

第三種參數傳遞格式稱為混合標記法:
即在調用一個函數時,同時使用位置標記法和名稱標記法為函數傳遞參數。採用這種參數傳遞方法時,
使用位置標記法所傳遞的參數必須放在名稱標記法所傳遞的參數前面。也就是說,無論函數具有多少個參數,
只要其中有一個參數使用名稱標記法,其後所有的參數都必須使用名稱標記法。

無論採用哪一種參數傳遞方法,實際參數和形式參數之間的資料傳遞只有兩種方法:傳址法和傳值法。
所謂傳址法是指在調用函數時,將實際參數的地址指標傳遞給形式參數,使形式參數和實際參數指向記憶體中的同一地區,從而實現參數資料的傳遞。
這種方法又稱作參照法,即形式參數參照實際參數資料。輸入參數均採用傳址法傳遞資料。
傳值法是指將實際參數的資料拷貝到形式參數,而不是傳遞實際參數的地址。預設時,輸出參數和輸入/輸出參數均採用傳值法。
在函數調用時,ORACLE將實際參數資料拷貝到輸入/輸出參數,而當函數正常運行退出時,又將輸出形式參數和輸入/輸出形式參數資料拷貝到實際參數變數中。

3. 參數預設值
在CREATE OR REPLACE FUNCTION 語句中聲明函數參數時可以使用DEFAULT關鍵字為輸入參數指定預設值。
具有預設值的函數建立後,在函數調用時,如果沒有為具有預設值的參數提供實際參數值,函數將使用該參數的預設值。
但當調用者為預設參數提供實際參數時,函數將使用實際參數值。
在建立函數時,只能為輸入參數設定預設值,而不能為輸入/輸出參數設定預設值。

②建立過程
1.建立預存程序
在ORACLE SERVER上建立預存程序,可以被多個應用程式調用,可以向預存程序傳遞參數,也可以向預存程序傳回參數.
建立過程文法:
CREATE[OR REPLACE] PROCEDURE Procedure_name
    [ (argment [ { IN| IN OUT }] Type,
    argment [ { IN| OUT| IN OUT} ] Type ]
    [ AUTHID DEFINER| CURRENT_USER ]
{ IS| AS}
    <類型.變數的說明>
BEGIN
    <執行部分>
EXCEPTION
    <可選的異常錯誤處理程式>
END;

2. 調用預存程序
ORACLE 使用EXECUTE語句來實現對預存程序的調用:
EXEC[UTE]  Procedure_name( parameter1, parameter2…);

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.