`
shendixiong
  • 浏览: 398068 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

mysql 实现oracle中的rownum

阅读更多

在mysql中并没有类似oracle中的rownum。可有的时候,我们需要获取对应的行数获取来进行相关排序、

实现方法

第一步:

SELECT @rownum:=0    from tableName t

 rownum 其意思等同于声明一个变量名(所以可以任意修改),并赋初始值为0!

 

但是这样的运行结果都是等于0,所以必须用到自增才型

所以需要结合,故

第二步(自增)

select @rownum := @rownum+1 from (SELECT @rownum:=0    from tableName t) t

 就可以实现oracle中的rownum

 

 非常感谢 lwpan 的评论。他所说的问题的确存在。如果直接运行上面的SQL语句是会报

Space is not allowed after parameter prefix ':' 异常。

该异常是因为hibernate的jar在4.0以下版本bug导致,4.0以上是没问题的。可以参考

https://hibernate.atlassian.net/browse/HHH-2697

 

解决办法如下:

 1.你所说的hibernate的bug的确存在,但是在4.0以下的版本,所以可以升级hibernate的jar !这点要说明下。其原理您也可以看看这篇文章
https://hibernate.atlassian.net/browse/HHH-2697
2.在网站上有多种解决办法,包括转义,函数,存储过程。其中转义是不可行,函数和存储过程是可以的.
3.以上2种办法虽然都可以解决,但都有很大弊端,第一种,一个项目一般不会因为你一个功能点而去升级一个jar,并且还要考虑到稳定 ,兼容等因素。
第二种,相对于来说好用点,但是,编写函数,存储过程的脚本有时候要给予数据库管理员,这个也麻烦点。
我想说的第三种办法是用hibernate的jdbc去查询,就可以实现!下面是个简单的样例

public List<Object[]> jdbcQuery(final String sql) {
		return (List<Object[]>) getHibernateTemplate().execute(new HibernateCallback() {
			
			@Override
			public Object doInHibernate(Session session) throws HibernateException,
					SQLException {
				 Connection con = session.connection();      
                           PreparedStatement ps = con.prepareStatement(sql);   
                           ResultSet rs = ps.executeQuery();   
                           String sort = null;
                           String building_id = null;
                           int rowNum = 0;
                           List<Object[]> list = new ArrayList<Object[]>();
                           Object[] obj = null;
                         while(rs.next()){ 
                	   obj = new Object[1];
                	   rowNum = rs.getInt("rownum");
                	   obj[0] = rowNum ;
                	   list.add(obj);
                         }      
                          rs.close();      
                          ps.close();      
                          session.flush();      
                          session.close();
			  return list;
			}
		});
	}

 

 

2
6
分享到:
评论
4 楼 cuishuangjia 2013-10-07  
http://cuishuangjia.iteye.com/blog/1934659
提供单体测试,结合测试解决方案。
性能优化。
DbTools工具下载:
http://cuishuangjia.iteye.com/
支持ORACLE,MYSQL,SQLSERVER,POSTGRE,DB2数据库相互转换功能

功能:
1。将数据库中的表结构和数据保存到EXCEL中。
2。将EXCEL中的数据,同步到数据库中。
3。当表结构发生变化时,数据不会丢失。
4。根据EXCEL中的表结构,生成建表语句SQL文。
5。多用户使用该软件时,可以随时记录某个用户对数据库的操作。
6。可以为进行压力测试,自动生成数据。
7。导出表结构,根据表结构和数据库中的表结构进行差分。
8。导出DB结构,和现有环境DB进行表结构差分
9。导出用户自定义表结构,根据表结构导入,导入数据前对EXCEL校验进行数据库验证和业务逻辑验证
10。单体测试,结合测试解决方案。
亲,请将5个压缩文件全部下载后,将5个压缩包解压后,将解压后的5个rar文件放入同一文件件下,再解压。
作者邮件:cuishuangjia@gmail.com
企鹅群:数据库第三方工具交流  184715368
3 楼 lwpan 2013-09-25  
shendixiong 写道
lwpan 写道
我的排行榜   之前做这个功能的时候用过这个 后来放弃了这样使用   hibernate的bug  使用原生createSqlQuery是没法执行的  使用ArrayList计算出我的位置 通过userId比较即可;


的确是有这个问题,我想我忘记把这个问题说明下了。非常感谢,其实这个也有办法解决:

1.你所说的hibernate的bug的确存在,但是在4.0以下的版本,所以可以升级hibernate的jar !这点要说明下。其原理您也可以看看这篇文章
https://hibernate.atlassian.net/browse/HHH-2697
2.在网站上有多种解决办法,包括转义,函数,存储过程。其中转义是不可行,函数和存储过程是可以的.
3.以上2种办法虽然都可以解决,但都有很大弊端,第一种,一个项目一般不会因为你一个功能点而去升级一个jar,并且还要考虑到稳定 ,兼容等因素。
第二种,相对于来说好用点,但是,编写函数,存储过程的脚本有时候要给予数据库管理员,这个也麻烦点。
我想说的第三种办法是用hibernate的jdbc去查询,就可以实现



总结的很好! 我直接用arraylist装起来 然后算出排序 个人觉得还是蛮简单的方法  方法1,2几乎不用不用考虑 jar包还是不要随意替换 以免影响了已有功能,
2 楼 shendixiong 2013-09-24  
lwpan 写道
我的排行榜   之前做这个功能的时候用过这个 后来放弃了这样使用   hibernate的bug  使用原生createSqlQuery是没法执行的  使用ArrayList计算出我的位置 通过userId比较即可;


的确是有这个问题,我想我忘记把这个问题说明下了。非常感谢,其实这个也有办法解决:

1.你所说的hibernate的bug的确存在,但是在4.0以下的版本,所以可以升级hibernate的jar !这点要说明下。其原理您也可以看看这篇文章
https://hibernate.atlassian.net/browse/HHH-2697
2.在网站上有多种解决办法,包括转义,函数,存储过程。其中转义是不可行,函数和存储过程是可以的.
3.以上2种办法虽然都可以解决,但都有很大弊端,第一种,一个项目一般不会因为你一个功能点而去升级一个jar,并且还要考虑到稳定 ,兼容等因素。
第二种,相对于来说好用点,但是,编写函数,存储过程的脚本有时候要给予数据库管理员,这个也麻烦点。
我想说的第三种办法是用hibernate的jdbc去查询,就可以实现
1 楼 lwpan 2013-09-23  
我的排行榜   之前做这个功能的时候用过这个 后来放弃了这样使用   hibernate的bug  使用原生createSqlQuery是没法执行的  使用ArrayList计算出我的位置 通过userId比较即可;

相关推荐

    sql语句中select top n与oracle的rownum与mysql的limit用法

    sql语句中select top n与oracle的rownum与mysql的limit 取前几条数据sql简单用法

    Mysql转oracle工具

    例如,MySQL支持的`LIMIT`在Oracle中需用`ROWNUM`或`FETCH FIRST`来实现分页;MySQL的`INFORMATION_SCHEMA`在Oracle中对应的是`DBA_`或`USER_`视图;此外,存储过程、触发器和函数的语法也有区别。 2. **数据类型...

    mysql类似oracle rownum写法实例详解

    总的来说,虽然 MySQL 没有内置的 `ROWNUM` 功能,但通过用户定义变量和子查询,我们可以实现与 Oracle 相似的逻辑。理解这些技巧对于那些习惯于 Oracle SQL 而又需要在 MySQL 中工作的开发者来说至关重要。希望这些...

    Oracle Sql语句转换成Mysql Sql语句

    在转换过程中,需要将Oracle的ROWNUM替换为MySQL的LIMIT子句。 3. **连接查询**:Oracle的JOIN语法允许在ON条件中使用子查询,而在MySQL中,子查询通常需要移到FROM或WHERE子句中。 4. **游标**:Oracle SQL支持...

    oracle rownum 的使用 和sqlserver有区别的!

    本文将详细介绍 Oracle 中 ROWNUM 的使用方法,并与 SQL Server 中相应的功能进行对比分析。 #### Oracle ROWNUM 基础用法 1. **ROWNUM 的默认行为:** - 在 Oracle 中,ROWNUM 默认从 1 开始计数,对于每一行...

    mysql-oracle数据转换工具

    例如,MySQL中的LIMIT关键字用于分页,而Oracle使用ROWNUM;MySQL的JOIN语法相对简单,Oracle则有更灵活的连接方式。 3. 数据类型:MySQL和Oracle支持的数据类型有所不同,比如MySQL有ENUM和SET类型,Oracle有BFILE...

    Convert Mysql to Oracle

    Mysql的`LIMIT`语句对应Oracle的`ROWNUM`或`FETCH FIRST`子句。"Convert Mysql to Oracle"会自动处理这些差异,将Mysql的数据结构和内容适配到Oracle的格式。 3. 数据加载:转换完成后,工具会将数据批量插入到...

    mysql和oracle和sql语句

    比如,SQL Server中的`TOP`关键字用于限制返回的行数,而MySQL和Oracle则使用`LIMIT`(MySQL)或`ROWNUM`(Oracle)。 在文件名中提到的"oracle常用sql语句.txt"可能包含Oracle的一些常见操作,如`SELECT`用于查询...

    两个版本Mysql和Oracle的分页标签

    本主题将深入探讨在MySQL和Oracle这两种流行的数据库管理系统中如何实现分页查询。 首先,我们来看MySQL中的分页查询。MySQL支持使用`LIMIT`和`OFFSET`关键字来实现分页。`LIMIT`用于指定每页显示的记录数,而`...

    从mysql转换到oracle数据库.docx

    2. Limit:MySQL 中一般采用 `limit` 去实现分页功能,而 Oracle 中一般采用 `rownum` 去实现分页。 3. Date:两种数据库对日期的处理也不一样,MySQL 中更加灵活。 4. LEFT 函数:Oracle 中没有相同的函数,我们...

    mySql与oracle分页技术

    本文将深入探讨MySQL与Oracle两种常用的数据库管理系统中的分页技术。 首先,我们来看MySQL的分页技术。MySQL提供了`LIMIT`子句来实现分页查询。`LIMIT m, n`语句用于限制查询结果的数量,其中`m`是起始索引,`n`是...

    mysql转换到oracle数据库

    - **Oracle**:利用`ROWNUM`实现分页。 **3. DATE类型处理** - **MySQL**:DATE类型的灵活性较高,支持更多的日期格式和操作。 - **Oracle**:相对较为固定,但提供了丰富的日期函数支持。 **4. LEFT函数** - ...

    sqlserver,mysql,oracle三种数据库的分页查询

    本文将深入探讨SQL Server、MySQL和Oracle这三种主流数据库系统中的分页查询实现方式。 首先,我们来看SQL Server。SQL Server提供了一种称为"TOP"的关键字来实现分页。例如,如果我们想获取第1页(假设每页有10条...

    MYSQL到ORACLE程序迁移的注意事项

    MySQL的分页查询使用`LIMIT`,而在Oracle中,需要利用`ROWNUM`。Oracle的分页SQL通常更为复杂,常见的做法是使用子查询或嵌套查询。例如: - **语句一**: ```sql SELECT id, field_name, ... FROM table_name ...

    Oracle,SQl,MySql实现分页查询

    本文将基于提供的文件信息,深入探讨三种不同的分页查询方法及其在Oracle、SQL Server(这里用SQL代替)、MySQL中的实现方式,并对它们的性能进行对比分析。 #### 分页方案一:利用Not In和SELECT TOP分页 **基本...

    mysql和Oracle命令的区别

    而在 Oracle 中,由于没有直接的 `OFFSET`,通常需要通过 `ROWNUM` 列配合子查询来实现分页。两种常见的 Oracle 分页查询方式如下: - 语句一: ``` SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ...

    oracle scott 转成mysql 的表学习应用

    例如,Oracle中用ROWNUM伪列进行分页,而在MySQL中则使用LIMIT和OFFSET。 最后,了解和实践这个过程可以帮助我们更好地理解和比较两种数据库系统的特性,从而在实际工作中更高效地处理跨平台的数据迁移和管理任务。...

    oracle与mysql的区别

    在 MySQL 中,组函数可以随意使用,但在 Oracle 中,如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是 group by 子句中的列否则报错。 例如:select name,count(money) from user;这个放在 MySQL ...

    Oracle中实现MySql中limit+SqlServer分页+分页的存储过程

    本篇文章将探讨如何在Oracle数据库中实现类似MySQL的`LIMIT`分页功能,以及如何模拟SQL Server的分页方式,并介绍`INTERSECT`和`MINUS`这两个SQL运算符。 首先,`INTERSECT`运算符用于找出两个或多个查询结果中的...

    慢sql监控mysql及oracle.pdf

    Oracle 中可以通过调整 rownum 来控制记录数,查看执行次数、总执行时间、平均执行时间等信息。可以使用以下 SQL 语句来统计慢 SQL: ```sql SELECT * FROM ( SELECT sa.SQL_TEXT, sa.SQL_FULLTEXT, sa....

Global site tag (gtag.js) - Google Analytics