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