我尝试限制结果集的大小,而不必从应用程序更改每个SQL语句(至少例如)。因此,不能为每个查询添加ROWNUM
子句。
我或多或少看一些全局参数,或者至少是一个会话参数(比如SQLServer中的SET ROWCOUNT
)。
该应用程序使用JDBC资源池连接到Oracle,因此我可以在SQL init JDBC池中设置会话范围的参数。
答案 0 :(得分:3)
您是否尝试过使用Statement.setMaxRows method?这是一种标准的JDBC方法,它将在获取指定的最大数量后静默删除行。
但从性能角度来看,实际修改发送到数据库的查询可能会更好。如果按照@MK的建议,你会告诉优化器你只需要获取N行。这可能允许优化器选择更有效的计划。
答案 1 :(得分:2)
我怀疑没有办法做到这一点。您可以创建一个AOP建议,它将通过用
包装查询来修改每个executeQuery()调用"select * from ( " + origQuery + " ) where ROWNUM <= 5"
但我希望这是我们正在谈论的暂时性或测试性的事情。