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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值