oracle分页的问题

问题描述

这两天在做oracle数据库分页时遇到一个问题,语句是这样的select userid,Name,rownum_ from ( select row_.*, rownum rownum_ from (SELECT * FROM v_users order by usertype) row_ where rownum <= 20) where rownum_ > 10结果如下:110142514刘静11210216027张刚12310020443杨青13410020695陆荣14510142503高明15610022743沈林16710216575沈敏17810013221郁晶18910051291俞雯191010114387侯芹20点击下一页,语句变为select userid,Name,rownum_ from ( select row_.*, rownum rownum_ from (SELECT * FROM v_users order by usertype) row_ where rownum <= 30) where rownum_ > 20结果如下:110040964沈芳21210144041孙奕22310142893马雅23410020695陆荣24510142503高明25610022743沈林26710216575沈敏27810013221郁晶28910051291俞雯291010114387侯芹30有相同的人被查询了出来,但是这里的userid字段肯定是唯一的,请问谁能告诉我为什么,谢谢?问题补充:是的,我的order字段不是主键,还是不明白如果这条语句SELECT * FROM v_users order by usertype单独执行,如果数据不变,是不是由于order by字段不是主键,每次取回来的记录顺序就不一样呢?

解决方案

如果order by 不能唯一确定记录的顺序就会出现这个问题。改变一下orderby的字段,换成主键什么的
解决方案二:
SELECT X.userid , X.NameFROM ( SELECT A.* , ROW_NUMBER() OVER(order by A.usertype) AS ROW_NO FROM v_users A) XWHERE X.ROW_NO > 10AND X.ROW_NO <= 20
解决方案三:
http://www.iteye.com/topic/9681这里解释得很清楚的。

时间: 2025-01-30 07:02:29

oracle分页的问题的相关文章

一个简单的oracle分页存储过程的实现和调用

oracle|存储过程|分页|oracle|存储过程|分页 在看了众多的分页存储过程以后发现都是针对sqlserver的,而没有oracle的,因此想写一个关于oracle的存储过程,因为我用到的数据库是oracle.---------------------------------------------------------------------------------------------------------------------------------------------

Oracle分页方法及示例

环境 Oracle 11gR2 + SQLPlus 问题 Oracle分页 解决 --创建测试 表 SQL> create table test 2 ( 3 id number primary key, 4 name varchar2(20) not null 5 ); 表已创建. --创建序列 SQL> SQL> create sequence seq_wgb_test; 序列已创建. --插入数据 SQL> insert into test(id, name) values(s

如何解决Oracle分页查询中排序与效率问题

本文将结合作者近日工作中,在ORACLE数据库分页查询时,遇到一个小问题,为大家讲解如何解决Oracle分页查询中排序与效率问题. 原始未分页查询Sql代码如下: select ROWNUM rn, t.id ID, o.name YYB,u.name XM, t.MC from tZDYSX t,tuser u,lborganization o where t.cjr=u.id and u.orgid=o.orgcode and t.gx = 1 order by ID 结果如下: RN  I

mysql、sqlserver、oracle分页,java分页统一接口实现

mysql.sqlserver.oracle分页,java分页统一接口实现  定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量  oracle分页:  select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart  sqlServer分页:             select * from ( select top

sql-jsp +oracle分页问题 主要是在SQL语句上

问题描述 jsp +oracle分页问题 主要是在SQL语句上 <%@ page language=""java"" contentType=""text/html; charset=UTF-8"" pageEncoding=""UTF-8""%> <%@page import=""java.sql.*""%><!DO

得到oracle分页SQL语句的函数-三层嵌套sql

     //获取Oracle分页语句 传入参数:strsql:查询所有记录的语句 pageno:当前页  pagesize:一页显示的记录数) public static String getOnePageSql(String strSql, int pageSize, int pageNo) {  return new StringBuffer("select   *   from (select   A.*,rownum   as   my_rownum   from (")  

oracle分页 删除rownum 此列

问题描述 oracle分页 删除rownum 此列 oracle 分页查询 不知道表有多少列的前提下 查询语句 为 SELECT * FROM (SELECT ROWNUM RowNumber,t.* FROM table t WHERE ROWNUM <=100) WHERE RowNumber >=10 查询出来的包含 rownum 这一列 ,如何用sql语句将此列删除掉 解决方案 select b.* from (select rowid rn,rownum from tablename

mysql、mssql及oracle分页查询方法详解_数据库其它

本文实例讲述了mysql.mssql及oracle分页查询方法.分享给大家供大家参考.具体分析如下: 分页查询在web开发中是最常见的一种技术,最近在通过查资料,有一点自己的心得 一.mysql中的分页查询 注: m=(pageNum-1)*pageSize;n= pageSize; pageNum是要查询的页码,pageSize是每次查询的数据量, 方法一: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返

oracle 分页sql 分段查数据和分段求和 sql语句 和java代码

自己搞报表,数据量比较海的时候就不能一次性查询出来,要分段才可以,我们采用rownum伪列进行查询,伪列有个特点只能从1开始,想实现 x > 10 and x <20不能按照常规的那种一条sql搞定,必须要双层嵌套才可以的,这个算是个经验吧,同理,求和sum(某列)的时候,如果想查找从第100行到第200行的数据某列之和的时候,你也要嵌套一下,between and 是不行的... 1.最佳oracle分页sql 1

创建 Oracle 分页存储过程

,可以在执行时将其设置为指向不同的结果集.使用 REF CURSOR 输出参数可以将 Oracle 结构化程序的结果集传递回调用应用程序.通过在调用应用程序中定义 OracleType.Cursor 数据类型的输出参数,可以访问 REF CURSOR 所指向的结果集. create or replace package MF_PAK_001 is type t_cursor is ref cursor; procedure GetDataByPage( p_tableName varchar2,