oracle中使用触发器实现查询分页功能

2024-06-09 04:38

本文主要是介绍oracle中使用触发器实现查询分页功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

oracle包分为包规范和包体

一:首先创建包规范

create or replace package p_pagewithgroup is


  -- Author  : 肖伟
  -- Created : 2014/3/18 
  -- Purpose : 分组分页过程


  TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集


PROCEDURE UP_GetRecordWithGroupByPage(


                       tblName in varchar2, --表名
                       PageSize  in number, --页面大小
                       PageIndex in number, --当前页
                       IsReCount out number,--返回总条数
                       strWhere in varchar2,-- 查询条件 (注意: 不要加 where)
                       strColums in varchar2, --字段集合,逗号分割
                        strSelectColums in varchar2, --字段集合,逗号分割
                        strGroup in varchar2,--分组条件语句
                        strOrder in varchar2,-- 排序条件语句
                       v_cur  out type_cur --返回当前页数据记录
 );
end p_pagewithgroup;

二:创建包结构体

create or replace package body p_pagewithgroup is


  PROCEDURE UP_GetRecordWithGroupByPage(


                       tblName in varchar2, --表名
                       PageSize  in number, --页面大小
                       PageIndex in number, --当前页
                       IsReCount out number,--返回总条数
                       strWhere in varchar2,-- 查询条件 (注意: 不要加 where)
                       strColums in varchar2, --字段集合,逗号分割
                        strSelectColums in varchar2, --字段集合,逗号分割
                        strGroup in varchar2,--分组条件语句
                        strOrder in varchar2,-- 排序条件语句
                       v_cur  out type_cur --返回当前页数据记录
 )
 AS
 --定义变量
   v_sql VARCHAR2(8000);
  v_count number;


 v_row_start    NUMBER;                                         --开始记录
 v_row_end      NUMBER;                                         --结束记录
  begin


 ------------------------------------------------------------显示总条数
      v_sql := 'select count(1) from ' || tblName;


      IF strWhere is not NULL OR strWhere <> ''
      THEN
         v_sql := v_sql || ' where ' || strWhere;
      END IF;
      IF strGroup is not null or strGroup <> ''
      then
        v_sql := v_sql || ' group by ' || strGroup;
        end if;
      DBMS_OUTPUT.put_line (v_sql);
      --v_sql:='select count(1) from BS_USER where 1=1';
      EXECUTE IMMEDIATE v_sql into v_count ;
      IsReCount:=v_count;


  ------------------------------------------------------------显示任意页内容
    -- IF PageSize<1 THEN
     -- PageSize:=1;
     -- END IF;
      v_row_start := (PageIndex - 1) * PageSize + 1;
      v_row_end := PageIndex * PageSize;


    v_sql:='select '||strSelectColums||' from (select t.*,RowNum as rn from (select '||strColums||' from '||tblName;
        IF strWhere is not NULL OR strWhere <> ''
      THEN
         v_sql := v_sql  || ' where ' || strWhere;
      END IF;
      IF strGroup is not null or strGroup <> ''
      then
        v_sql := v_sql || ' group by ' || strGroup;
        end if;
        IF strOrder is not null or strOrder <> ''
      then
        v_sql := v_sql || ' order by ' || strOrder;
        end if;
    v_sql := v_sql  ||') t) where rn between '||v_row_start||' and '||v_row_end;


    DBMS_OUTPUT.put_line (v_sql);


  open v_cur for v_sql;
  
 End UP_GetRecordWithGroupByPage;


 ----------------------------------------------------------
end p_pagewithgroup;

三:测试

首先打开PL/SQL command window

SQL>declare 
  -- Local variables here
  IsReCount  number;--返回总条数
  my_cur   p_pagewithgroup.type_cur ; --返回当前页数据记录
begin
  -- Test statements here
  p_pagewithgroup.UP_GetRecordWithGroupByPage('T_DIVISION',5,1,ISReCount,' 1=1 ',' * ',' * ',null,null,my_cur );
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(IsReCount));
end;


这篇关于oracle中使用触发器实现查询分页功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044242

相关文章

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp