网站首页 > 技术文章 正文
概述
网上有很多实现分页的存储过程,刚好项目有这方面需求,顺便做个总结,记录下做备忘!
下面基于Oracle11g环境。
需求:编写一个存储过程,要求可以输入表名、每页显示记录数和当前页,返回总记录数、总页数和结果集
1、oracle的分页写法
select t1.*,rownum rn from (select * from emp) t1; select t1.*,rownum rn from (select * from emp) t1 where rownum<=10;
在分页时,大家可以把下面的sql语句当作一个模板使用
--查询第5行到第10行的数据(错误写法) select rownum, empno from (select rownum rn , empno from emp) a where a.rownum > 5 and a.rownum < 10; --查询第5行到第10行的数据(正确写法) select rownum, empno from (select rownum rn , empno from emp where rownum<10) a where a.rn>5;
2、编写存储过程
开发一个包,在该包中,定义类型test_cursor,是个游标
create or replace package testpackage as type test_cursor is ref cursor; end testpackage;
开始编写分页的过程
create or replace procedure fenye(tableName in varchar2, --表名 pageSize in number, --一页显示记录数 pageNow in number, --当前页 myrows out number, --总记录数 myPageCount out number, --总页数 p_cursor out testpackage.test_cursor --返回的记录集 ) is --定义部分 --定义sql语句 字符串 v_sql varchar2(1000); --定义两个整数 v_begin number := (pageNow - 1) * pageSize + 1; v_end number := pageNow * pageSize; begin --执行部份 v_sql := 'select * from (select t1.*,rownum rn from (select * from ' || tableName || ') t1 where rownum<=' || v_end || ') where rn>=' ||v_begin; --把游标和sql关联 open p_cursor for v_sql; --计算myrows和myPageCount --组织一个sql v_sql := 'select count(*) from ' || tableName; --执行sql,并把返回的值赋给myrows; execute immediate v_sql into myrows; --计算myPageCount if mod(myrows, PageSize) = 0 then myPageCount := myrows / PageSize; else myPageCount := myrows / PageSize + 1; end if; --关闭游标 close p_cursor; end;
这里还是有些瑕疵的,还得再改进下,后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~
猜你喜欢
- 2024-11-09 分享SQL语句书写规范(分享sql语句书写规范是什么)
- 2024-11-09 香港DM德馬大中華非遺共創集團/甲骨文“异”YI字写法和解释
- 2024-11-09 mysql总结(中)(mysql详细介绍)
- 2024-11-09 oracle 函数decode用法(oracle的decode方法)
- 2024-11-09 Oracle 存储过程、包、包体如何创建?
- 2024-11-09 Oracle分析函数还是要知道滴(oracle 分析函数)
- 2024-11-09 香港DM德馬大中華非遺共創集團/ 甲骨文“乃”NAI字写法和解释
- 2024-11-09 SQL查询进阶案例演示(sql查询教程)
- 2024-11-09 oracle创建用户名和表空间,并赋值权限
- 2024-11-09 第1章 Oracle 第一天(oracle 今年第一天)
- 最近发表
-
- 使用Knative部署基于Spring Native的微服务
- 阿里p7大佬首次分享Spring Cloud学习笔记,带你从0搭建微服务
- ElasticSearch进阶篇之搞定在SpringBoot项目中的实战应用
- SpringCloud微服务架构实战:类目管理微服务开发
- SpringBoot+SpringCloud题目整理
- 《github精选系列》——SpringBoot 全家桶
- Springboot2.0学习2 超详细创建restful服务步骤
- SpringCloud系列:多模块聚合工程基本环境搭建「1」
- Spring Cloud Consul快速入门Demo
- Spring Cloud Contract快速入门Demo
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)