一、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();