如何在Oracle中全局(或通过会话)限制结果集?

时间:2012-06-19 18:27:46

标签: java sql oracle java-ee oracle11g

我尝试限制结果集的大小,而不必从应用程序更改每个SQL语句(至少例如)。因此,不能为每个查询添加ROWNUM子句。

我或多或少看一些全局参数,或者至少是一个会话参数(比如SQLServer中的SET ROWCOUNT)。

该应用程序使用JDBC资源池连接到Oracle,因此我可以在SQL init JDBC池中设置会话范围的参数。

2 个答案:

答案 0 :(得分:3)

您是否尝试过使用Statement.setMaxRows method?这是一种标准的JDBC方法,它将在获取指定的最大数量后静默删除行。

但从性能角度来看,实际修改发送到数据库的查询可能会更好。如果按照@MK的建议,你会告诉优化器你只需要获取N行。这可能允许优化器选择更有效的计划。

答案 1 :(得分:2)

我怀疑没有办法做到这一点。您可以创建一个AOP建议,它将通过用

包装查询来修改每个executeQuery()调用
"select * from ( " + origQuery + " ) where ROWNUM <= 5"

但我希望这是我们正在谈论的暂时性或测试性的事情。