首页 数据库 mysql教程 如何在Oracle存储过程中实现分页

如何在Oracle存储过程中实现分页

Jun 07, 2016 pm 04:15 PM
oracle 分页 存储 实现

几乎每一个WEB应用都会用到分页,因此,将其做得通用高效就变得非常重要了,根据自己的想法用存储过程做了一个分页的存储过程,与大家分享,希望能够通过讨论得到更好的解决方案。 之所以用存储过程,是因为以后需要修改的话不需要修改程序代码,只需要修改

  几乎每一个WEB应用都会用到分页,因此,将其做得通用高效就变得非常重要了,,根据自己的想法用存储过程做了一个分页的存储过程,与大家分享,希望能够通过讨论得到更好的解决方案。

  之所以用存储过程,是因为以后需要修改的话不需要修改程序代码,只需要修改存储过程的代码。但这个例子是在存储过程里动态生成的SQL语句,不知道会不会因此失去存储过程一次编译和快速的特点。代码如下:

  1、首先建立一个包,用户创建一个游标类型

  create or replace package pkg_query as

  type cur_query is ref cursor;

  end pkg_query;

  2、创建存储过程

  CREATE OR REPLACE PROCEDURE prc_query

  (p_tableName in varchar2, --表名

  p_strWhere in varchar2, --查询条件

  p_orderColumn in varchar2, --排序的列

  p_orderStyle in varchar2, --排序方式

  p_curPage in out Number, --当前页

  p_pageSize in out Number, --每页显示记录条数

  p_totalRecords out Number, --总记录数

  p_totalPages out Number, --总页数

  v_cur out pkg_query.cur_query) --返回的结果集

  IS

  v_sql VARCHAR2(1000) := ''; --sql语句

  v_startRecord Number(4); --开始显示的记录条数

  v_endRecord Number(4); --结束显示的记录条数

  BEGIN

  --记录中总记录条数

  v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || p_tableName || ' WHERE 1=1';

  IF p_strWhere IS NOT NULL or p_strWhere '' THEN

  v_sql := v_sql || p_strWhere;

  END IF;

  EXECUTE IMMEDIATE v_sql INTO p_totalRecords;

  --验证页面记录大小

  IF p_pageSize

  p_pageSize := 0;

  END IF;

  --根据页大小计算总页数

  IF MOD(p_totalRecords,p_pageSize) = 0 THEN

  p_totalPages := p_totalRecords / p_pageSize;

  ELSE

  p_totalPages := p_totalRecords / p_pageSize + 1;

  END IF;

  --验证页号

  IF p_curPage

  p_curPage := 1;

  END IF;

  IF p_curPage > p_totalPages THEN

  p_curPage := p_totalPages;

  END IF;

  --实现分页查询

  v_startRecord := (p_curPage - 1) * p_pageSize + 1;

  v_endRecord := p_curPage * p_pageSize;

  v_sql := 'SELECT * FROM (SELECT A.*, rownum r FROM ' ||

  '(SELECT * FROM ' || p_tableName;

  IF p_strWhere IS NOT NULL or p_strWhere '' THEN

  v_sql := v_sql || ' WHERE 1=1' || p_strWhere;

  END IF;

  IF p_orderColumn IS NOT NULL or p_orderColumn '' THEN

  v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle;

  END IF;

  v_sql := v_sql || ') A WHERE rownum = '

  || v_startRecord;

  DBMS_OUTPUT.put_line(v_sql);

  OPEN v_cur FOR v_sql;

  END prc_query;

  3、JAVA代码里取出结果集

  String sql= "{ call prc_query(?,?,?,?,?,?,?,?,?) }";

  CallableStatement call = con.prepareCall(sql);

  // ……中间数据设置及注册省略

  call.registerOutParameter(9, OracleTypes.CURSOR);

  // 取出结果集

 

  (ResultSet) call.getObject(9);

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle如何查表空间大小 oracle如何查表空间大小 Apr 11, 2025 pm 08:15 PM

要查询 Oracle 表空间大小,请遵循以下步骤:确定表空间名称,方法是运行查询:SELECT tablespace_name FROM dba_tablespaces;查询表空间大小,方法是运行查询:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

oracle视图如何加密 oracle视图如何加密 Apr 11, 2025 pm 08:30 PM

Oracle 视图加密允许您加密视图中的数据,从而增强敏感信息安全性。步骤包括:1) 创建主加密密钥 (MEk);2) 创建加密视图,指定要加密的视图和 MEk;3) 授权用户访问加密视图。加密视图工作原理:当用户查询加密视图时,Oracle 使用 MEk 解密数据,确保只有授权用户可以访问可读数据。

oracle数据库如何导入 oracle数据库如何导入 Apr 11, 2025 pm 08:06 PM

数据导入方法:1. 使用 SQLLoader 实用程序:准备数据文件、创建控制文件、运行 SQLLoader;2. 使用 IMP/EXP 工具:导出数据、导入数据。提示:1. 大数据集推荐 SQL*Loader;2. 目标表应存在,列定义匹配;3. 导入后需验证数据完整性。

Oracle安装失败如何卸载 Oracle安装失败如何卸载 Apr 11, 2025 pm 08:24 PM

Oracle 安装失败的卸载方法:关闭 Oracle 服务,删除 Oracle 程序文件和注册表项,卸载 Oracle 环境变量,重新启动计算机。若卸载失败,可使用 Oracle 通用卸载工具手动卸载。

oracle如何查看实例名 oracle如何查看实例名 Apr 11, 2025 pm 08:18 PM

在 Oracle 中查看实例名的方法有三种:命令行中使用 "sqlplus" 和 "select instance_name from v$instance;" 命令。在 SQL*Plus 中使用 "show instance_name;" 命令。通过操作系统的任务管理器、Oracle Enterprise Manager 或检查环境变量 (Linux 上的 ORACLE_SID)。

oracle如何获取时间 oracle如何获取时间 Apr 11, 2025 pm 08:09 PM

在 Oracle 中获取时间有以下方法:CURRENT_TIMESTAMP:返回当前系统时间,精确到秒。SYSTIMESTAMP:比 CURRENT_TIMESTAMP 更准确,精确到纳秒。SYSDATE:返回当前系统日期,不含时间部分。TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'): 将当前系统日期和时间转换为特定格式。EXTRACT:从时间值中提取特定部分,如年份、月份或小时。

oracle awr报告怎么看 oracle awr报告怎么看 Apr 11, 2025 pm 09:45 PM

AWR 报告是显示数据库性能和活动快照的报告,解读步骤包括:识别活动快照的日期和时间。查看活动、资源消耗的概览。分析会话活动,找出会话类型、资源消耗和等待事件。查找潜在性能瓶颈,如缓慢的 SQL 语句、资源争用和 I/O 问题。查看等待事件,识别并解决它们以提高性能。分析闩锁和内存使用模式,以识别导致性能问题的内存问题。

oracle动态sql怎么创建 oracle动态sql怎么创建 Apr 12, 2025 am 06:06 AM

可以通过使用 Oracle 的动态 SQL 来根据运行时输入创建和执行 SQL 语句。步骤包括:准备一个空字符串变量来存储动态生成的 SQL 语句。使用 EXECUTE IMMEDIATE 或 PREPARE 语句编译和执行动态 SQL 语句。使用 bind 变量传递用户输入或其他动态值给动态 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 执行动态 SQL 语句。

See all articles