如何实现PL/SQL中编写Oracle数据库分页的存储过程
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要为大家展示了"如何实现PL/SQL中编写Oracle数据库分页的存储过程",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何实现PL/SQL中编
千家信息网最后更新 2025年02月01日如何实现PL/SQL中编写Oracle数据库分页的存储过程
这篇文章主要为大家展示了"如何实现PL/SQL中编写Oracle数据库分页的存储过程",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何实现PL/SQL中编写Oracle数据库分页的存储过程"这篇文章吧。
其实 Oracle数据库的分页还是比较容易理解的。此文以oracle数据库中的SCOTT用户的EMP表为例,用PL/SQL Developer编写一个分页存储过程,要求是:可以输入表名,每页显示记录数,当前页,返回总记录数,总页数和返回的结果集。
由于需要返回查询出来的结果集,需要在PL/SQL中创建一个package,这个包里面定义一个refcursor类型,用于记录sql语句查询出来的结果集。创建包的代码如下:
create or replace package pagingPackage as type paging_cursor is ref cursor; end pagingPackage;
接下来开始Oracle的分页过程,我们可以用select emp.*,rownum from emp;来显示地表示出每行的行标。然后可以根据行标对内容进行分页,下面这个SQL语句可以作为Oracle分页的模板。
select * from (select t1.*,rownum rn from (select * from emp) t1 where rownum<=12) where rn>=8;
有了上面的refcursor类型和分页模板,下面开始编写分页的存储过程,代码如下:
create procedure paging (tableName in varchar2 ,--表名 pageSizes in number,--每页显示记录数 pageNow in number,--当前页 rowNums out number,--总记录数 pageNum out number,--总页数 paging_cursor out pagingPackage.paging_cursor) is --定义部分 --定义sql语句,字符串 v_sql varchar2(1000); --定义两个整数,用于表示每页的开始和结束记录数 v_begin number:=(pageNow-1)*pageSizes+1; v_end number:=pageNow*pageSizes; begin --执行部分 v_sql:='select * from (select t1.*,rownum rn from (select * from '||tableName||') t1 where rownum<='||v_end||') where rn>='||v_begin; --把游标和sql语句关联 open paging_cursor for v_sql; --计算rowNums和pageNum --组织一个sql语句 v_sql:='select count(*) from '||tableName; --执行该sql语句,并赋给rowNums execute immediate v_sql into rowNums; --计算pageNum if mod(rowNums,pageSizes)=0 then pageNum := rowNums/pageSizes; else pageNum := rowNums/pageSizes+1; end if; end;
在Java中编写代码测试分页,代码如下:
package com.test.oracletest; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; //测试分页 public class OraclePaging { public static void main(String[] args) { try { // 加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); // 获取连接 Connection connection = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "SCOTT", "tiger"); // 创建CallableStatement,调取数据库的存储过程 CallableStatement cst = connection .prepareCall("{call paging(?,?,?,?,?,?)}"); // 给?赋值 cst.setString(1, "emp"); cst.setInt(2, 6); cst.setInt(3, 2); // 注册存储过程的输出项 cst.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER); cst.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); cst.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR); // 执行 cst.execute(); // 获取输出项 int rowNums = cst.getInt(4); int pageNum = cst.getInt(5); ResultSet rs = (ResultSet) cst.getObject(6); System.out.println("总记录数rowNums = " + rowNums); System.out.println("总页数pageNum = " + pageNum); System.out.println("EMPNO" + '\t' + "ENAME" + '\t' + "ROWNUM"); while (rs.next()) { System.out.println(rs.getInt("EMPNO") + " " + '\t' + rs.getString("ENAME") + '\t' + rs.getInt("RN")); } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 } } }
执行的结果如图所示:
我们还可以通过修改模板最内侧的视图来满足其他一些基本的排序要求。Oracle的分页思想就是如此。。#
以上是"如何实现PL/SQL中编写Oracle数据库分页的存储过程"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
过程
存储
数据
数据库
语句
代码
结果
内容
模板
篇文章
页数
出项
类型
部分
学习
帮助
查询
测试
接下来
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全都有哪些功能
闵行区什么网络技术铸造辉煌
泰州七九互联网科技有限公司
监狱网络安全核心内容
视频播放服务器下载
数据库备份方法有
数据库中奖惩的实体
澳门特区网络安全教育
中国网络安全厂商排名
上海 网络安全宣传周
奥普软件开发公司
db2数据库表锁和行锁
计算机网络技术的学业发展
mc233服务器
浪潮软件开发岗位怎么样
免疫基因网络安全
网络安全保障外包服务
db文件怎么连接数据库
浙大网络安全考什么
EPS数据库被锁如何解锁
mysql 群聊数据库
网络安全与执法是哪个学院
互联网服务器app
泡泡魔女传无法连接到服务器
简述数据库管理的完整性
网络技术怎么开公司
主客观评价网络安全风险
服务器硬盘热备
百度在线网络技术和百度网讯
吐鲁番软件开发优化价格