一、Oracle Package的作用
1、定義與說明
a. 相關對象(自訂類型、函數、預存程序等)的封裝
b. 程式包的各部分
- 程式包規格說明
聲明子程式
- 程式包主體
定義子程式
2、使用程式包的優點
- 模組化
- 更輕鬆的應用程式設計
- 資訊隱藏
- 新增功能
- 效能更佳
3、公有項和私人項的區別
公有項:在程式包說明部分定義的變數、過程、函數
私人項:在程式包主體部分定義的變數、過程、函數
公有項 私人項
可以在程式包之外引用 不能在程式包之外引用
是在程式包規格說明中定義的 是在程式包主體中定義的
用於全域目的 用於局部目的
二、定義Package
用於定義Package中使用的自訂類型、函數、預存程序等...
樣本:
CREATE OR REPLACE PACKAGE PKG_SYS_SEARCH is
--定義返回的遊標
TYPE VLD_RESULT IS REF CURSOR;
--帶傳回型別為遊標變數的預存程序
PROCEDURE GET_SEARCH_RESULT(SEARCH_CONDITION IN VARCHAR2,RETURN_VAL OUT VLD_RESULT);
END PKG_SYS_SEARCH;
三、完成Package Body
對Package中的自訂類型、函數、預存程序等對象的具體實現。
樣本:
CREATE OR REPLACE PACKAGE BODY PKG_SYS_SEARCH
AS
PROCEDURE GET_SEARCH_RESULT(SEARCH_CONDITION IN VARCHAR2,RETURN_VAL OUT VLD_RESULT)
AS
BEGIN
--設定傳回值
OPEN RETURN_VAL FOR
SELECT * FROM SYS_PARAM WHERE TYPE=SEARCH_CONDITION;
END;
END PKG_SYS_SEARCH;
注意:Package Body裡面定義的GET_SEARCH_RESULT中參數名稱必須與Package裡面的GET_SEARCH_RESULT一致
四、Ado.net調用此過程
using System.Data.OracleClient
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");
// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "PKG_SYS_SEARCH.GET_SEARCH_RESULT";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameters for the stored procedure including the REF CURSOR
// to retrieve the result set
cmd.Parameters.Add("SEARCH_CONDITION", OracleType.VarChar).Value = "Aduit";
cmd.Parameters.Add("RETURN_VAL", OracleType.Cursor).Direction = ParameterDirection.Output;
// open the connection and create the DataReader
conn.Open();
OracleDataReader dr = cmd.ExecuteReader();
// 以DataReader返回
while(dr.Read())
{
for(int i = 0; i < dr.FieldCount; i++)
Console.Write(dr[i].ToString() + ";");
Console.WriteLine();
}
//以DataSet返回
System.Data.OracleClient.OracleDataAdapter da = new System.Data.OracleClient.OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "test");
conn.Close();