Java调用Oracle数据库的分页存储过程

 最近项目进度比较缓慢,初步研究了一下Oracle的存储过程,将代码贴出来。

 

 首先先贴出来Oracle的分页分页存储过程代码吧。

 1.这是包的代码

 

 create or replace package DB_Oper is

  -- Author  : LIUBING
  -- Created : 2009-10-28 15:01:30
  -- Purpose : 测试Oracle的分页存储过程
 
  -- Public type declarations
  type ref_DataSet is REF CURSOR;


  -- Public function and procedure declarations
  function GetCount(mTableName varchar2, mTerm varchar2) return number;
  procedure return_DataSet(
     mTableName in varchar2,    --表名
     mTerm in varchar2,         --条件
     mPageSize in number,       --每页显示记录数
     mPageIndex in number,      --当前页
     mOrderField in varchar2,   --排序字段
     mOrderStyle in number,    --排序方式 0 升序 1 降序
     mTotalRecords out number,  --总记录数
     mDateSet out ref_DataSet    --记录
     );

end DB_Oper;

 

2.这是包体的代码

 

 create or replace package body DB_Oper is

 -----  获取记录数  ------
  function GetCount(mTableName varchar2, mTerm varchar2) return number is
    i number;
    vSql varchar2(1000);
  begin
    i := 0;
    vSql := 'select count(*)  from ' || mTableName ;

    if length(mTerm) > 0 then
      vSql := vSql || ' where ' || mTerm;
    end if;

    execute IMMEDIATE  vSql into i;

    return(i);
  end;

  -----  数据分页  ----------
  procedure return_DataSet(
     mTableName in varchar2,    --表名
     mTerm in varchar2,         --条件
     mPageSize in number,       --每页显示记录数
     mPageIndex in number,      --当前页
     mOrderField in varchar2,   --排序字段
     mOrderStyle in number,    --排序方式  0 升序 1 降序
     mTotalRecords out number,  --总记录数
     mDateSet out ref_DataSet    --记录集
     ) is
  begin
    declare
      Invalid_Input Exception;
      vSql varchar2(1000);
      Start_page number;
      End_page number;
      n_PageIndex number;
      n_PageSize number;
      --mTotalRecords number;
    begin
      mTotalRecords := GetCount(trim(mTableName), trim(mTerm));
      vSql := 'select * from ' || mTableName;
      if length(trim(mTerm)) > 0 then
        vSql := vSql || ' where ' || trim(mTerm) ;
      end if;
      if length(trim(mOrderField)) > 0 then
       begin
          vSql := vSql || ' order by ' || trim(mOrderField);
          if morderStyle > 0 then
            vSql := vSql || ' desc ';
          end if;
       end;
      end if;

      --
      n_PageSize := mPageSize;
      if mPageSize <= 0 then
        n_PageSize := 10;
      end if;
      n_PageIndex := mPageIndex;
      if mPageIndex <= 0 then
        n_PageIndex := 1;
      end if;
      if mTotalRecords > 0 and n_PageIndex > 1 then
      begin
            --如果n_pageindex大于实际的页数,则取实际页数
        if n_PageIndex > round((mTotalRecords / n_PageSize) + 0.5) then
          n_PageIndex := round((mTotalRecords / n_PageSize) + 0.5);
        end if;
      end;
      end if;
      Start_page := (n_PageIndex - 1) * n_PageSize + 1;
      End_page := n_PageIndex * n_PageSize;
      vSql := 'SELECT * FROM (SELECT A.*, rownum r FROM ( ' || vSql || ' ) A WHERE rownum <= ' || End_page || ' ) B WHERE r >= '|| Start_page;

      Open mDateSet for vSql;

    exception
      When Invalid_Input Then
        open mDateSet for select null from dual;
    end;
  end return_DataSet;
end DB_Oper;

3.这是Java的测试代码

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值