首页数据库oracle 存储过程返回 结果集 table形式的案例

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

时间2024-02-28 15:03:03发布访客分类数据库浏览529
导读:收集整理的这篇文章主要介绍了oracle 存储过程返回 结果集 table形式的案例,觉得挺不错的,现在分享给大家,也给大家做个参考。 --Sys_refcursor 和 cursor...
收集整理的这篇文章主要介绍了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;
     declarep_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 @R_777_2358@ic 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语句的结果集和保存执行的sql语句(深入分析)
  • Oracle中返回结果集的存储过程分享
  • oracle sys_connect_by_path 函数 结果集连接
  • Asp Oracle存储过程返回结果集的代码
  • 关于C#中使用Oracle存储过程返回结果集的问题

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: oracle 存储过程返回 结果集 table形式的案例
本文地址: https://pptw.com/jishu/631580.html
oracle 批量删除表数据的几种方法 关于Oracle多表连接,提高效率,性能优化操作

游客 回复需填写必要信息