標籤:
一、程式包
程式包是一種資料庫物件,它是對相關PLSQL類型、子程式、遊標、異常、變數和常量的封裝。程式包包含兩部分內容:
1、程式包規範:可以宣告類型、變數、常量、異常、遊標和子程式。
2、程式包主題:可以實現在程式包規範中定義的遊標、子程式。
二、程式包規範
程式包規範包含一些應用程式課件的公用對象和類型的聲明它是應用程式的借口。規範包含應用程式所需的資源,如果程式包規範只宣告類型、常量、變數和異常,則不需要有程式包主體。只有子程式和遊標才具有程式包主體。
文法:
create [or replace] package package_name
is|as
[public type and item declations]
[subprogram specifications]
end [package_name]
說明:
package_name:包的名稱。
public type and item declations:聲明公用類型、常量、變數、異常和遊標等。
subprogram specifications:聲明PL/SQL子程式,也就是預存程序和函數。
在程式包規範中聲明的項也可以再程式包之外使用。這樣的項成為“公用對象”。
例:
--程式包規範的聲明CREATE OR REPLACE PACKAGE PACKAGE_ME IS PROCEDURE PRO_EMP_SELECT(ENO NUMBER); --聲明一個預存程序:根據員工編號查詢員工資訊 FUNCTION FUN_EMP_SELECT(ENO NUMBER) RETURN NUMBER; --聲明一個函數,根據員工編號查詢員工工資。END PACKAGE_ME;
三、程式包主體:
程式包主題包含了在程式包規範中聲明的每個遊標和子程式的具體實現。私人聲明也可以包含在程式包主體中。程式包主題部分初始化是可選的,它可用於初始化程式包包中的變數。程式包的初始化部分既不能調用程式包,也不能將參數傳遞給程式包,而且,初始化部分僅運行一次。
create [or replace] package body package_name
is|as
[public type and item declarations]
[subprogram bodies]
[begin
initialization_statements]
end [package_name]
說明:
public type and item declarations:聲明變數、常量、遊標、異常或類型。
subprogram bodies:定義公用和私人PL/SQL子程式。
initialization_statements:程式包中規範代碼的實現。
例:對上面所聲明的規範部分的預存程序和函數提供實現。
--建立程式包主體,提供者包內容的實現,和預存程序、函數的聲明一致CREATE OR REPLACE PACKAGE BODY PACKAGE_ME IS PROCEDURE PRO_EMP_SELECT(ENO NUMBER) AS V_NAME EMP.ENAME%TYPE; V_SAL EMP.SAL%TYPE; BEGIN SELECT ENAME, SAL INTO V_NAME, V_SAL FROM EMP WHERE EMPNO = ENO; DBMS_OUTPUT.PUT_LINE(‘name:‘ || V_NAME || ‘ sal:‘ || V_SAL); END PRO_EMP_SELECT; FUNCTION FUN_EMP_SELECT(ENO NUMBER) RETURN NUMBER AS V_SAL EMP.SAL%TYPE; BEGIN SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = ENO; RETURN V_SAL; END FUN_EMP_SELECT;END PACKAGE_ME;
四、調用程式包
DECLARE v_sal emp.sal%TYPE;BEGIN package_me.PRO_EMP_SELECT(7788); --調用方式和調用預存程序方式一樣,不過需要在預存程序前添加程式包名 v_sal := package_me.FUN_EMP_SELECT(7788); --調用方式和調用函數方式一樣,不過需要在函數前添加程式包名 dbms_output.put_line(v_sal);END;
Oracle基礎 程式包