我希望能够在不必更改应用程序中的每个SQL语句的情况下限制结果集的大小(至少在某些情况下)。因此,在每个查询中添加ROWNUM
子句不是一个选项。
我正在寻找一些全局参数,或者至少是会话参数(例如SQLServer中的SET ROWCOUNT
)。
该应用程序使用JDBC资源池连接到Oracle,因此我可以在SQL init JDBC池中设置会话级别的参数。
我希望能够在不必更改应用程序中的每个SQL语句的情况下限制结果集的大小(至少在某些情况下)。因此,在每个查询中添加ROWNUM
子句不是一个选项。
我正在寻找一些全局参数,或者至少是会话参数(例如SQLServer中的SET ROWCOUNT
)。
该应用程序使用JDBC资源池连接到Oracle,因此我可以在SQL init JDBC池中设置会话级别的参数。
我怀疑没有办法做到这一点。您可以创建一个AOP建议,通过使用包装查询来修改每个executeQuery()调用。
"select * from ( " + origQuery + " ) where ROWNUM <= 5"
但我希望我们所谈论的是一个临时的或测试性质的事情。
select * from (select 1 a, 2 a from dual);
会导致ORA-00918: column ambiguously defined
错误。而更改SQL语句可能会破坏某些性能调整方法,例如存储轮廓。 - Jon Heller
ROWNUM
子句告诉Oracle您只想要前N行,则可以节省的时间要多得多。理论上,JDBC驱动程序可以通过在默默添加“WHERE rownum <= N”子句来实现setMaxRows
--不知道Oracle JDBC驱动程序是否实际这样做。 - Justin Cave