- 浏览: 1399673 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (346)
- linux (10)
- hbase (50)
- hadoop (23)
- java (52)
- java multi-thread (13)
- Oracle小记 (41)
- 机器学习 (12)
- 数据结构 (10)
- hadoop hive (16)
- java io (4)
- jms (1)
- web css (1)
- kafka (19)
- xml (2)
- j2ee (1)
- spring (6)
- ibatis (2)
- mysql (3)
- ext (3)
- lucene (3)
- hadoop pig (3)
- java nio (3)
- twemproxy (1)
- antlr (2)
- maven (6)
- mina (1)
- 列数据库 (1)
- oozie (2)
- mongodb (0)
- 报错 (0)
- jetty (1)
- neo4j (1)
- zookeeper (2)
- 数据挖掘 (3)
- jvm (1)
- 数据仓库 (4)
- shell (3)
- mahout (1)
- python (9)
- yarn (3)
- storm (6)
- scala (2)
- spark (5)
- tachyon (1)
最新评论
-
guokaiwhu:
赞啊!今晚遇到相同的问题,正追根溯源,就找到了博主!
hbase 报错gc wal.FSHLog: Error while AsyncSyncer sync, request close of hlog YouAr -
喁喁不止:
很清楚,有帮助。
hive常用函数 -
dsxwjhf:
Good job !!
kafka获得最新partition offset -
Locker.Xai:
参考了
freemaker教程 -
maoweiwer:
为啥EPHEMERAL_SEQUENTIAL类型的节点并没有自 ...
zookeeper 入门讲解实例 转
查询oracle时,做存储过程实现分页
create or replace procedure query_by_page( pagenum in number, pagesql in varchar2, pagesize in number, pagecount out number, allpagecount out number, v_cur out querypage.type_cur ) as v_sql varchar2(3000); v_pb number; v_pd number; begin v_sql :='select count(*) from('||pagesql||')'; execute immediate v_sql into allpagecount; -- 记录数 pagecount :=ceil(allpagecount/pagesize); -- 分页数 v_pd := pagenum*pagesize +pagesize; v_pb := v_pd - pagesize + 1; v_sql := 'select * from ('||pagesql||') where rn between '||v_pb||' and '||v_pd; open v_cur for v_sql; end;
其中 这种写法效率不太好,因为内查询遍历了,过多无用的记录,所以后来把v_pd放到了内循环里,这样能减少数据量
把我现在的过程贴出来了,感觉还是不太好,还不如直接传两句sql来的痛快
create or replace procedure query_by_page( pagenum in number, pagesql in varchar2, pagesize in number, pagecount out number, allpagecount out number, v_cur out querypage.type_cur ) as v_sql varchar2(3000); v_pb number; v_pd number; v_innner_sql varchar2(3000); begin v_sql :='select count(*) from('||pagesql||')'; execute immediate v_sql into allpagecount; -- 记录数 pagecount :=ceil(allpagecount/pagesize); -- 分页数 v_pd := pagenum*pagesize +pagesize; v_pb := v_pd - pagesize + 1; if instr(pagesql,'group by') >= 1 then v_sql := 'select * from ('||pagesql||') where rn between '||v_pb||' and '||v_pd; else if instr(pagesql,'where') >= 1 then v_innner_sql := pagesql||' and rownum <= '||v_pd; v_sql:='select * from ('||v_innner_sql||') where rn >='||v_pb; else v_innner_sql := pagesql || ' where rownum <= '|| v_pd; v_sql:='select * from ('||v_innner_sql||') where rn >='||v_pb; end if; end if; -- v_sql := 'select * from ('||pagesql||') where rn between '||v_pb||' and '||v_pd; --效率太慢 open v_cur for v_sql; end;
顺便把java的部分代码贴出来
/** * 分页查询 * @param sql * @param pageNum * @param pageSize * @param bean * @param datasource * @throws Exception */ public static PageDataBaseBean queryUsingPaging(String sql,int pageNum,int pageSize,IDataBaseBean bean,SingleDataSource datasource) throws Exception{ PageDataBaseBean pbl = new PageDataBaseBean(); Connection conn = null; CallableStatement cst = null; ResultSet rs = null; try { conn = datasource.getConnection(); cst = conn.prepareCall("call query_by_page(?,?,?,?,?,?)"); cst.setInt(1, pageNum); cst.setString(2, sql); cst.setInt(3, pageSize); cst.registerOutParameter(4, Types.VARCHAR); cst.registerOutParameter(5, Types.INTEGER); cst.registerOutParameter(6, OracleTypes.CURSOR); cst.execute(); int pageCount = cst.getInt(4); int allPageCount = cst.getInt(5); rs = (ResultSet) cst.getObject(6); //赋值 pbl.setCurrentPageNum(pageNum); pbl.setPageCount(pageCount); pbl.setPageSize(pageSize); pbl.setTotalSize(allPageCount); IDataBaseBean databaseBean = bean.getClass().newInstance(); while(rs.next()){ //赋值TODO databaseBean = bean.getClass().newInstance(); databaseBean.loadFromResultSet(rs); pbl.insertBean(databaseBean); } } catch (Exception e) { e.printStackTrace(); }finally{ if(conn!=null) conn.close(); if(cst!=null) cst.close(); if(rs!=null) rs.close(); } return pbl; }
PageDataBaseBean是包含分页信息和实体集合的类
IDataBaseBean是实体bean的接口
发表评论
-
oracle报错 ora-14300:partition key maps to a partition outside maximum pemitted nu
2014-02-28 20:57 2025可能由两个原因造成 1.partition数量超过 ... -
oracle自动分区 (时间 数字)
2014-01-21 20:15 8928按照时间,每天分区 create table test_p ... -
oracle WM_CONCAT行转列
2013-08-03 16:01 1458Sql代码 ... -
oracle语法备忘-游标
2012-12-18 15:27 1117oracle的游标备忘 显示游标 declar ... -
oracle执行顺序
2012-10-31 16:17 1229看了一篇oracle执行顺 ... -
oracle语法备忘-循环
2012-10-26 15:50 1076oracle循环语句 loop while for 测 ... -
oracle 函数
2012-10-08 14:59 1012转 http://lwxjjgc.iteye.com/blog ... -
oracle 插入字符串
2012-10-08 14:16 3330一直都认为oracle有插入方法,可是没找到,就写了一个凑 ... -
oracle exception
2012-10-05 21:19 1263转 http://www.cnblogs.com/huyong ... -
oracle if else
2012-09-29 15:30 3856oracle中的if else if inst ... -
oracle 获取表,列注释
2012-09-28 16:23 2012前段时间,自己用的表好长,列好多(这是谁设计滴) 所以给自己 ... -
to_char
2012-09-27 11:34 0to_char转换数字 to_char(31 ... -
oracle 分区
2012-09-26 15:32 1066创建分区 --先声明一下:列表分区不支持多列,但是范围 ... -
oracle 语法备忘录
2012-09-26 14:15 0-- 游标 cursor object_cursor ... -
oracle 绑定变量
2012-09-26 12:48 1131不太喜欢看到在procedure用||拼接sql的语句 所以 ... -
jdbc insert数据后获取ID
2012-09-20 16:21 4500有时insert数据,数据ID为自动生成,需要获取ID。 ... -
Oracle生成uuid
2012-09-20 09:22 0select sys_guid() from dual; ... -
oracle 实现自增auto_increament
2012-09-19 12:53 1390在mysql中,实现字段自增,只用给他设置为auto_incr ... -
jdbc 报错 - 索引中丢失 IN 或 OUT 参数:
2012-09-19 12:45 5477jdbc 报错 - 索引中丢失 IN 或 OUT 参数: ... -
oracle for update nowait
2012-09-14 15:38 1050当两个用户同时更新同一条记录是, 使用select for u ...
相关推荐
oracle分页存储过程,oracle分页存储过程
### Oracle分页存储过程解析与应用 在数据库管理和应用程序开发中,处理大量数据时,分页查询是一项常用且重要的技术。Oracle数据库提供了多种方法来实现数据分页,其中使用存储过程进行分页是一种高效且灵活的方式...
"Oracle分页存储过程 终极版"旨在提供一个高效、灵活的解决方案,以应对各种分页查询的需求。这个存储过程优化了性能,并支持各种条件筛选和排序,使得在海量数据中进行分页操作变得更为便捷。 首先,理解分页的...
在分页存储过程中,主要理解了变量的动态赋值和输入输出参数的使用就非常简单了 下面为调用方法: var c_Preccount number; var c_Ppagecount number; var c_cur refcursor; exec proc_SpPag(1,'SELECT * FROM T_...
本文将深入解析一个Oracle分页存储过程的设计思想与具体实现方法。该存储过程通过输入参数控制每页显示的记录数,并返回指定页面的数据,同时提供了总记录数和总页数等信息。 #### 知识点二:存储过程定义与结构...
总结来说,Oracle分页存储过程是通过动态构造SQL语句,结合输入的分页参数,计算出总页数,并返回指定页的数据。这种方式在处理大量数据时提高了效率,同时也提供了灵活的查询控制。通过包装这些逻辑在存储过程中,...
oracle 分页 存储过程,超级牛的分页存储过程,执行后可以直接实用,分页速度刚刚的
### 带排序的Oracle分页存储过程 在开发Web应用程序的过程中,分页是一个非常常见的需求。为了提高系统的性能及可维护性,采用存储过程来实现分页逻辑是一种较为推荐的做法。下面将详细介绍如何利用Oracle数据库中...
Oracle 分页存储过程 SQL Oracle 分页存储过程 SQL
Java调用Oracle分页存储过程是一项常见的数据库操作,尤其在处理大数据量时,为了提高查询效率和用户体验,分页查询显得尤为重要。Oracle数据库提供了一种高效的方法,即通过创建存储过程来实现分页功能,而Java作为...
本文将基于给定的“oracle分页存储过程千万级”文件信息,深入解析其核心概念、设计思路及实现细节。 ### 核心概念解析 #### 1. 存储过程(Stored Procedure) 存储过程是一种预编译的SQL代码块,存储在数据库...
功能说明 写好oracle的连接字符串和查询语句,调用程序中的方法可以很方便的实现分页功能。该方法中,将参数连接字符串,查询的sql语句,... 效率不是很高,如有高人写出很厉害的分页存储过程,希望您与大家分享。
### Oracle 分页存储过程 UP_Sys_CommQuery_GetPageList 的详细解析 #### 一、概述 在Oracle数据库中实现高效的数据分页是一项重要的任务。本文将深入解析一个名为`UP_Sys_CommQuery_GetPageList`的存储过程,该...