我尝试限制结果集的大小,而不必更改应用程序中的每个 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"
但我希望这是我们正在谈论的临时或测试的事情。