gpt4 book ai didi

java - Oracle 引用游标的结果集很慢

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:52 25 4
gpt4 key购买 nike

从过程中获取游标结果集并迭代它比查询结果集慢得多。我有一个返回游标的过程,但需要 5 秒才能获取下一个结果集。

String callProcedure = "{ call SCHEMANAME.TEMP_PACKAGE.GET_CURSOR_RESULTS(?,?,?,?) }"; 
cs = con.prepareCall(callProcedure);
cs.setString(1, "Variable1");
cs.setString(2,"Variable2");
cs.setString(3,"Variable3");
cs.registerOutParameter(4, OracleTypes.CURSOR);
ResultSet rs = (ResultSet) cs.getObject(4);

while (rs.next()){
}

我使用日志发现 rs.next() 需要 5-6 秒。所以我改变了逻辑如下,

String callProcedure = "{ call SCHEMANAME.TEMP_PACKAGE.GET_CURSOR_RESULTS(?,?,?,?,?) }"; 
cs = con.prepareCall(callProcedure);
cs.setString(1, "Variable1");
cs.setString(2,"Variable2");
cs.setString(3,"Variable3");
cs.registerOutParameter(4,java.sql.Types.VARCHAR);
cs.registerOutParameter(5,java.sql.Types.INTEGER);

我从过程中获取了这些参数,并使用准备好的语句来执行游标中使用的查询。

PreparedStatement ps = con.prepareStatement(query);
ResultSet rs = ps.executeQuery();
while (rs.next()){
}

上述方法比使用 sys_refcursor 更快。请解释为什么使用 sys_refcursor 比普通查询花费更多时间。

PS:光标不会返回超过 20 行。

谢谢。

最佳答案

这应该会有帮助

http://docs.oracle.com/cd/E11882_01/java.112/e16548/resltset.htm#JJDBC28621

By default, when Oracle JDBC runs a query, it retrieves a result set of 10 rows at a time from the database cursor. This is the default Oracle row fetch size value. You can change the number of rows retrieved with each trip to the database cursor by changing the row fetch size value.

用于设置和获取获取大小的Statement、PreparedStatement、CallableStatement 和 ResultSet 对象:

void setFetchSize(int rows) throws SQLException

int getFetchSize() throws SQLException

关于java - Oracle 引用游标的结果集很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50902848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com