千家信息网

如何实现PL/SQL中编写Oracle数据库分页的存储过程

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,这篇文章主要为大家展示了"如何实现PL/SQL中编写Oracle数据库分页的存储过程",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何实现PL/SQL中编
千家信息网最后更新 2024年12月12日如何实现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安全错误 数据库的锁怎样保障安全 网络安全技术能自学吗 天津阿里云服务器系统云空间 游戏服务器人太多卡住了怎么办 企业邮箱服务器架设 cad网络安全不正确 河北云麦网络技术有限公司中标 shell服务器基本命令 国际中文教学资源动态数据库 嵌入式软件开发stm32 请求服务器证书 黄浦区常用网络技术创新服务 技术好的软件开发哪家好 java软件开发内蒙招聘 网络安全生产检查制度 杭州索非软件开发有限公司 数据库达到c2级别安全性 网吧的无盘服务器速度有多快 绍兴现在那里还有服务器 骑士人才数据库 企业电力消费数据库 服务器还要存储吗 网络安全维护证书 联想电脑的代理服务器在哪里 我的世界基岩版服务器价格 网络安全工程师全国招聘 网络安全知识竞赛新闻稿 镇网络安全自评工作总结 桑德兰服务器 研究生网络安全专业好找工作吗 华为服务器内存保护技术分哪几种
0