Oracle Package中預存程序返回遊標

來源:互聯網
上載者:User

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.