zoukankan      html  css  js  c++  java
  • 我的oracle分页存储过程

    create or replace package TX_PKG_PAGEPACKAGE  is  
      type TX_RESULTLIST is ref cursor; 
      procedure TX_PRC_PAGINATION(tx_resultlist out TX_RESULTLIST,insql in varchar2,currentpage in number,pagecount in number); 
    end;
    create or replace package body TX_PKG_PAGEPACKAGE is
      procedure TX_PRC_PAGINATION(tx_resultlist out TX_RESULTLIST,
                               insql         in varchar2,
                               currentpage   in number,
                               pagecount     in number) as
                               strSql varchar2(2000);
      begin
        strSql:='select * from (select rownum P_TX_ROWNUM, P_TX_TABLE.* from ('|| insql ||') P_TX_TABLE where rownum <='|| pagecount * currentpage ||') where P_TX_ROWNUM > '||(currentpage - 1) * pagecount;
        open TX_RESULTLIST for strSql;
      end TX_PRC_PAGINATION;
    end TX_PKG_PAGEPACKAGE;
    

    以上是sql。
    先声明一个游标,做返回结果集。
    然后把要查询的sql当做参数传入,动态执行,返回结果集。

    c#:

    主方法:
    public DataSet SelectDsByProcedure(IDbConnection conn, string procedureName, IDbDataParameter[] parameters)
            {
                DataSet ds = new DataSet();
                OracleDataAdapter sqlDA = new OracleDataAdapter();
                OracleCommand command = new OracleCommand(procedureName, (OracleConnection)conn);
                command.CommandType = CommandType.StoredProcedure;
                foreach (OracleParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
                sqlDA.SelectCommand = command;
                sqlDA.Fill(ds);
                Connection.Close();
                return ds;
            }
    
    程序中调用:
    OracleParameter[] paramDic = {
        new OracleParameter("tx_resultlist",OracleType.Cursor),
        new OracleParameter("insql",OracleType.VarChar),
        new OracleParameter("currentpage",OracleType.Int32),
        new OracleParameter("pagecount",OracleType.Int32)       };
                paramDic[0].Direction = ParameterDirection.Output;
                paramDic[1].Value = "select * from student order by stu_gender";
                paramDic[2].Value = 1;
                paramDic[3].Value = 2;
                DataSet ds = db.SelectDsByProcedure("TX_PKG_PAGEPACKAGE.TX_PRC_PAGINATION", paramDic);
    

    存储过程中没做一些判断。比如传入存储过程的参数是否合法。是否有结果集之类的。请自行添加。

  • 相关阅读:
    让VC6.0编译出来的程序支持XP样式或XP风格
    table+js实现网站左侧列表下拉隐藏
    图片或文件保存到数据库
    C#使用Cookie方法
    oracle实现今年数据 去年同期和增长百分比
    检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005
    oracle&&Sqlserver获取表名列名主键及数据类型
    sql中将null转换为空
    sql 游标
    oracle 提示口令失效解决方法
  • 原文地址:https://www.cnblogs.com/coder-axin/p/7391198.html
Copyright © 2011-2022 走看看