Oracle Package中存儲過程返回遊標

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章