2011-09-02 57 views
2

我想获取SQL中的行数。我用在Oracle中获取指定的行数11g

select ROWNUM,FULL_NAME 
from OSQS_INSTITUTION 
order by FULL_NAME 
WHERE rownum BETWEEN 10 AND 20 

,并尝试这个

select ROWNUM,FULL_NAME 
from OSQS_INSTITUTION 
order by FULL_NAME limit 10,20 

,并都返回相同的错误

SQL命令无法正常结束

编辑:

StringBuilder sqlStatement = new StringBuilder(); 
    sqlStatement.append("SELECT USER_NO,FULL_NAME,ACTIVE from"); 
    sqlStatement.append("("); 
    sqlStatement.append(" SELECT USER_NO,FULL_NAME,ACTIVE, ROW_NUMBER() OVER(ORDER BY full_name) rn"); 
    sqlStatement.append("FROM osqs_institution"); 
    sqlStatement.append(")WHERE rn BETWEEN ? AND ? "); 

    PreparedStatement pstmt = null; 
    pstmt = con.prepareStatement(sqlStatement.toString()); 
    pstmt.setInt(1, from); 
    pstmt.setInt(2, to); 
    rs = pstmt.executeQuery(); 

需要尝试和捕获。

+0

我知道是错误,在此行sqlStatement.append( “FROM osqs_institution”); 我应该在“从”关键工作之前腾出空间 – palAlaa

回答

3

在查询的第一个版本中,您指定ORDER BY之后的WHERE子句,该子句在语法上是错误的。

第二个版本适用于MySQL,但不适用于Oracle。

无论哪种情况,当您使用BETWEEN时都无法获得任何行。

相反试试这个:

WITH qry AS 
(
    SELECT full_name, ROW_NUMBER() OVER(ORDER BY full_name) rn 
     FROM osqs_institution 
) 
SELECT rn, full_name 
    FROM qry 
WHERE rn BETWEEN 10 AND 20 

如果你不想使用ROW_NUMBER函数,那么试试这个:

SELECT rn, full_name 
    FROM 
(
    SELECT full_name, ROWNUM AS rn 
     FROM (SELECT * FROM osqs_institution ORDER BY full_name) 
) 
WHERE rn BETWEEN 10 AND 20 
+0

它适用于thanx,但是“ROW_NUMBER()OVER(ORDER BY full_name)”是什么意思? – palAlaa

+0

ROW_NUMBER是Oracle提供的一种分析功能。这意味着通过full_name对记录进行排序,然后为每个记录分配一个行号。 – Chandu

+0

@Cyber​​nate - 在第二个查询中,我假设你的意思是'ROWNUM'而不是'ROWNUMBER' –