oracle:储存过程实现分页
Oracle 实现 过程 分页 储存
2023-09-27 14:21:41 时间
1 CREATE OR REPLACE PACKAGE PKG_QUERY IS 2 3 4 5 -- Author : ADMINISTRATOR 6 -- Created : 2016/12/8 星期四 10:28:37 7 -- Purpose : 用做查询游标 8 9 10 -- Public type declarations 11 TYPE CUR_QUERY IS REF CURSOR; 12 13 14 END PKG_QUERY; 15 16 17 18 19 CREATE OR REPLACE PROCEDURE prc_query 20 (p_tableName in varchar2, --表名 21 p_strWhere in varchar2, --查询条件 22 p_child_query in varchar2, --子查询 23 p_orderColumn in varchar2, --排序的列 24 p_orderStyle in varchar2, --排序方式 25 p_curPage in out Number, --当前页 26 p_pageSize in out Number, --每页显示记录条数 27 p_totalRecords out Number, --总记录数 28 p_totalPages out Number, --总页数 29 v_cur out pkg_query.cur_query) --返回的结果集 30 IS 31 v_sql VARCHAR2(4000) := ''; --sql语句 32 v_startRecord Number(7); --开始显示的记录条数 33 v_endRecord Number(7); --结束显示的记录条数 34 BEGIN 35 --记录中总记录条数 36 v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || p_tableName || ' WHERE 1=1'; 37 IF p_strWhere IS NOT NULL THEN 38 v_sql := v_sql || p_strWhere; 39 END IF; 40 dbms_output.put_line(v_sql); 41 EXECUTE IMMEDIATE v_sql INTO p_totalRecords; 42 p_totalPages := 0; 43 -- if p_totalRecords <> 0 then 44 45 46 --验证页面记录大小 47 IF p_pageSize < 0 THEN 48 p_pageSize := 0; 49 END IF; 50 51 52 --根据页大小计算总页数 53 IF MOD(p_totalRecords,p_pageSize) = 0 THEN 54 p_totalPages := floor(p_totalRecords / p_pageSize); 55 ELSE 56 p_totalPages := floor(p_totalRecords / p_pageSize) + 1; 57 END IF; 58 59 60 61 62 63 64 --实现分页查询 65 v_startRecord := (p_curPage - 1) * p_pageSize + 1; 66 v_endRecord := p_curPage * p_pageSize; 67 v_sql := 'SELECT b.*,' || p_child_query || ' FROM (SELECT A.*, rownum r FROM ' || 68 '(SELECT * FROM ' || p_tableName; 69 IF p_strWhere IS NOT NULL THEN 70 v_sql := v_sql || ' WHERE 1=1 ' || p_strWhere; 71 END IF; 72 IF p_orderColumn IS NOT NULL THEN 73 v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle; 74 END IF; 75 v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= ' 76 || v_startRecord; 77 DBMS_OUTPUT.put_line(v_sql); 78 OPEN v_cur FOR v_sql; 79 -- end if; 80 81 82 END prc_query;
相关文章
- Oracle协议适配器错误解决办法
- 下载mysql server安装包的时候,不登录oracle账号,实现下载
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- Java+Oracle实现事务——JDBC事务
- Oracle实现SQL的isnumeric 函数
- Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
- Oracle日志性能查看
- 谈谈怎么实现Oracle数据库分区表
- oracle数据库迁移
- Oracle数据库上云利器 阿里云发布数据库迁移服务ADAM
- 基于Java(SSH)+ Oracle 实现的(Web)视频教学平台【100010405】
- oracle-字符集
- 转 :Oracle分区表 (Partition Table) 的创建及管理
- 如何实现对 Oracle 的实时数据捕获和性能调优|Flink CDC 专题
- 如何评估oracle AWR 的在oracle 中的存储情况
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)
- ORACLE触发器具体解释
- Java笔记4:JDBC纯驱动方式连接Oracle
- Greenplum中与Oracle类似的排序函数实现
- aspnetpager+repeater+oracle实现分页功能