shuaigis

Oracle数据库分页存储过程

CREATE OR REPLACE PROCEDURE WP_ALL_PAGINATION
  (
   TABLENAME_IN   in   varchar2,       -- 表名
   PAGESIZE_IN  in   number := 20,           -- 页尺寸
   PAGEINDEX_IN  in   number := 1,            -- 页码
   ORDERSYNTAX_IN  in varchar2, ---排序的具体语法
   CONDITION_IN   in   varchar2 := \'\',  -- 查询条件 (注意: 不要加 where)
   FIELDSNAME_IN   in  varchar2:=\'*\',     --显示列
   ONLYFIELD_IN     in    varchar2 :=\'*\',--唯一字段
   COUNT_OUT in out number,
   cur_out OUT sys_refcursor
)
as
   tempSql varchar2(8000):=\'\';
   countSql varchar2(8000):=\'\';
   strSql varchar2(8000):=\'\';
   condition varchar2(8000):=CONDITION_IN;
   fieldsName varchar2(1000):=\'\';

begin
   if condition is null then
     condition := \'1=1\';
   end if;

   fieldsName := trim(FIELDSNAME_IN);
   if fieldsName != \'*\' then -- 不为 \'*\'
     tempSql := \'select \'|| FIELDSNAME_IN ||\' from \'||TABLENAME_IN||\' where \'||condition||\' \'||ORDERSYNTAX_IN;
   else
     tempSql := \'select  a.* from \'||TABLENAME_IN||\' a where \'||condition||\' \'||ORDERSYNTAX_IN;
   end if;

   --记录集

   strSql := \'select t.*,rownum as num from (\'||tempSql||\') t \';
   strSql := \'select * from (\'|| strSql ||\') tt where tt.num<=\'||PAGESIZE_IN||\' and tt.num>\'||PAGEINDEX_IN;

 


   --为了排序,重新组织语句
   --strSql := \'select * from (\'|| strSql||\') tt \'||ORDERSYNTAX_IN;
   --记录总数

   countSql := \'select \'||ONLYFIELD_IN||\' from \'||TABLENAME_IN||\' where \'||condition;
   countSql := \'select count(distinct \'||ONLYFIELD_IN||\') as Total from (\'|| countSql ||\') t\';
   --dbms_output.put_line(strSql);
   execute immediate countSql into COUNT_OUT;

   OPEN cur_OUT FOR strSql;
end;

分类:

技术点:

相关文章:

  • 2021-06-08
  • 2021-11-09
  • 2021-06-11
  • 2021-10-01
  • 2021-09-07
  • 2022-02-01
  • 2021-09-05
猜你喜欢
  • 2021-10-08
  • 2021-05-31
  • 2022-12-23
  • 2022-03-05
  • 2021-08-21
  • 2021-12-28
相关资源
相似解决方案