1、创建Package

create or replace package forPaged is
       type my_csr is ref cursor;
       procedure getPaged(tableName in varchar2,objectid in number,fields in varchar2,wherecase in varchar2,orderFieldStr  varchar2,pageSize in number,pageIndex in number,expression varchar2,totalCount out number,csr out forPaged.my_csr);
end forPaged;

2、创建存储过程;里面用到了父子级联查询;SQL中如果用到了单引号,需要再用一个单引号转义

create or replace procedure getPaged(tableName in varchar2,objectid in number,fields in varchar2,wherecase in varchar2,orderFieldStr in varchar2,pageSize in number,pageIndex in number,expression varchar2,totalCount out number,csr out forPaged.my_csr) is
     v_sql varchar2(1000);
     v_begin number:=(pageIndex-1)*pageSize+1; --开始记录
     v_end number:=pageIndex*pageSize;         --结束记录
     begin
       v_sql:='select count(*) from (select entitycode from '|| tableName ||' where '|| wherecase||' and Exists(select distinct companycode from company where '||tableName||'.entitycode=company.companycode start with object_id='||objectid||' connect by prior object_id=parent_id)) t';
       execute immediate v_sql into totalCount;
       if expression is not null then
         v_sql:='select '|| fields ||','||expression||' HeJi from
         (select t.* ,rownum rn from (select '|| fields ||' from '|| tableName|| ' where '|| wherecase ||' and Exists(select distinct companycode from company where '||tableName||'.entitycode=company.companycode start with object_id='||objectid||' connect by prior object_id=parent_id) order by '|| orderFieldStr ||' ) t) 
        where rn>='|| v_begin||' and rn<='|| v_end;
      else
        
        v_sql:='select '|| fields ||' from
          (select t.* ,rownum rn from (select '|| fields ||' from '|| tableName|| ' where '|| wherecase ||' and Exists(select distinct companycode from company where '||tableName||'.entitycode=company.companycode start with object_id='||objectid||' connect by prior object_id=parent_id) order by '|| orderFieldStr ||' ) t) 
        where rn>='|| v_begin||' and rn<='|| v_end;
        end if;
          open csr for v_sql;
          --close csr;关闭后则不会传出数据集
       end getPaged;

3、Asp.Net中使用

 1  /// <summary>
 2         /// 使用存储过程实现的分页查询
 3         /// </summary>
 4         /// <param name="dataTableName">数据表</param>
 5         /// <param name="objectid">实体表主键</param>
 6         /// <param name="fields">表中字段拼接的字符串</param>
 7         /// <param name="wherecase">查询条件</param>
 8         /// <param name="pagesize">每页显示数据行数</param>
 9         /// <param name="pageIndex">当前页</param>
10         /// <param name="orderFieldStr">排序字段拼接的字符串</param>
11         /// <param name="totalCount">符合条件总记录数</param>
12         /// <param name="expression">计算表达式</param>
13         /// <returns></returns>
14         public DataTable getReportDataByPage(M_SelectData model, out int totalCount)
15         {
16             IList<OracleParameter> dataParameters = new List<OracleParameter>();
17             dataParameters.Add(new OracleParameter("tableName", model.tableName));
18             dataParameters.Add(new OracleParameter("objectid", model.companyId));
19             dataParameters.Add(new OracleParameter("fields", model.fieldsStr));
20             dataParameters.Add(new OracleParameter("wherecase", model.whereStr));
21             dataParameters.Add(new OracleParameter("pageSize", model.pageSize));
22             dataParameters.Add(new OracleParameter("pageIndex", model.pageIndex));
23             dataParameters.Add(new OracleParameter("orderFieldStr", model.orderFieldStr));
24             dataParameters.Add(new OracleParameter("expression", model.expression));
25             dataParameters.Add(new OracleParameter("totalCount", OracleType.Int32));
26             dataParameters.Add(new OracleParameter("csr", OracleType.Cursor));
27             dataParameters[dataParameters.Count - 1].Direction = ParameterDirection.Output;
28             dataParameters[dataParameters.Count - 2].Direction = ParameterDirection.Output;
29             DataTable dataTable = OracleSqlHelper.ExcuteProcedure("getpaged", dataParameters.ToArray());
30             totalCount = int.Parse(dataParameters[dataParameters.Count - 2].Value.ToString());
31             return dataTable;
32         }
业务逻辑层

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-08
  • 2021-07-19
  • 2021-12-18
  • 2021-11-20
猜你喜欢
  • 2021-12-30
  • 2022-01-15
  • 2022-12-23
  • 2021-11-20
  • 2021-11-20
  • 2021-11-20
  • 2021-10-23
相关资源
相似解决方案