oracle 存储过程返回 结果集 table形式的案例

 更新时间:2021年01月25日 11:50:43   投稿:jingxian  
这篇文章主要介绍了oracle 存储过程返回 结果集 table形式的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

--sys_refcursor 和 cursor 优缺点比较

优点比较

优点一:

sys_refcursor,可以在存储过程中作为参数返回一个table格式的结构集(我把他认为是table类型,容易理解,其实是一个游标集), cursor 只能用在存储过程,函数,包等的实现体中,不能做参数使用。

优点二:

sys_refcursor 这东西可以使用在包中做参数,进行数据库面向对象开放。哈哈。我喜欢。cursor就不能。

create or replace procedure p_test(p_cur out sys_refcursor) 
as 
begin 
   open p_cur for select * from emp; 
end p_test; 
declare
p_cur sys_refcursor;
i emp%rowtype;
begin
 p_test(p_cur);
 loop fetch p_cur 
  into i;
  exit when p_cur%notfound;
  DBMS_OUTPUT.PUT_LINE('---'||i.ename||'---'||i.empno);
  end loop;
  close p_cur;
end;

补充:Oracle存储过程返回select * from table结果

1.首先建立一个包

create or replace package LogOperation is
 type listLog is ref cursor;
 procedure PCenterExamine_sel(listCenterExamine out listlog,testlist out listLog,numpage in decimal);
end;

2.建立包中的主体

create or replace package body LogOperation is
 procedure PCenterExamine_sel
 (
  listCenterExamine out listlog,
  testlist out listlog,
  numpage in decimal
 ) 
 as
 begin
  open listCenterExamine for select * from Log_CenterExamine;
  open testlist for select * from Log_CenterExamine;
 end;
end;

3.在程序中调用存储过程的值

public static DataSet RunProcedureGetDataSet(string storedProcName, OracleParameter[] parameters)
    {
      string connectionString ="192.168.1.1/db";
      using (OracleConnection connection = new OracleConnection(connectionString))
      {
        DataSet dataSet = new DataSet();
        connection.Open();
        OracleDataAdapter sqlDA = new OracleDataAdapter();
        sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
        sqlDA.Fill(dataSet, "dt");
        connection.Close();
        return dataSet;
      }
    }
private static OracleCommand BuildQueryCommand(OracleConnection connection, string storedProcName, IDataParameter[] parameters)
    {
      OracleCommand command = new OracleCommand(storedProcName, connection);
      command.CommandType = CommandType.StoredProcedure;
      foreach (OracleParameter parameter in parameters)
      {
        command.Parameters.Add(parameter);
      }
      return command;
    }

4.有几个out的ref cursor,变量ds中就用几个DataTable。并且输入参数 indecimal也不会受影响,并且可以参加存储过程的运算

OracleParameter[] paramDic = { 
          new OracleParameter("listCenterExamine",OracleType.Cursor),
          new OracleParameter("testlist",OracleType.Cursor),
          new OracleParameter("numpage",OracleType.Int32)};
        paramDic[0].Direction = ParameterDirection.Output;
        paramDic[1].Direction = ParameterDirection.Output;
        paramDic[2].Value = 1;
        ds = Model.OracleHelper.RunProcedureGetDataSet("LogOperation.PCenterExamine_sel", paramDic);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Oracle环境通过SQL*PLUS本地登录时报错的解决过程

    Oracle环境通过SQL*PLUS本地登录时报错的解决过程

    这篇文章主要介绍了Oracle环境通过SQL*PLUS本地登录时报错的解决过程,需要的朋友可以参考下
    2017-08-08
  • ORACLE 修改表结构 之ALTER CONSTAINTS的使用

    ORACLE 修改表结构 之ALTER CONSTAINTS的使用

    这篇文章主要介绍了ORACLE 修改表结构 之ALTER CONSTAINTS的使用,需要的朋友可以参考下
    2014-07-07
  • Orace查询数据出现乱码的问题解决思路

    Orace查询数据出现乱码的问题解决思路

    经常有些朋友会遇到,我明明是输入的正确中文,为什么我在另外一台电脑上查询却出现乱码啦?其实这个是数据库在进行字符集转换的时候出现了问题,本文介绍解决方法,需要了解的朋友可以参考下
    2013-01-01
  • Oracle数据库正则表达式纯数字例子

    Oracle数据库正则表达式纯数字例子

    正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,这篇文章主要给大家介绍了关于Oracle数据库正则表达式纯数字的相关资料,需要的朋友可以参考下
    2024-08-08
  • 有关Oracle数据库的备份情况

    有关Oracle数据库的备份情况

    有关Oracle数据库的备份情况...
    2007-03-03
  • 判定一个字符串是否为有效时间的函数

    判定一个字符串是否为有效时间的函数

    判定时间是否有效的函数,为有效时间则返回1,不是有效时间则返回0,需要的朋友可以参考下
    2014-07-07
  • oracle Dbeaver存储过程语法详解

    oracle Dbeaver存储过程语法详解

    这篇文章主要介绍了oracle Dbeaver存储过程语法详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Oracle DECODE 丢失时间精度的原因与解决方案

    Oracle DECODE 丢失时间精度的原因与解决方案

    在Oracle数据库中使用DECODE函数处理DATE类型数据时,可能会丢失时分秒信息,这主要是因为DECODE在处理时进行了自动类型转换,通常只比较日期部分,忽略时间部分,解决这一问题的方法是使用CASE WHEN语句,它可以更精确地处理DATE类型数据,避免时间信息的丢失
    2024-10-10
  • oracle导入导出某个schema数据的步骤

    oracle导入导出某个schema数据的步骤

    这篇文章主要介绍了oracle导入导出某个schema数据的步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Oracle实现行列转换的方法分析

    Oracle实现行列转换的方法分析

    这篇文章主要介绍了Oracle实现行列转换的方法,结合实例形式分析了Oracle针对固定列、不定列、列数不固定等情况下的行列转换操作技巧,需要的朋友可以参考下
    2016-08-08

最新评论