gpt4 book ai didi

java - 调用包存储过程时超出了最大游标数

转载 作者:行者123 更新时间:2023-12-02 01:36:46 24 4
gpt4 key购买 nike

我有一个 Oracle 包,其中包含 3 个存储过程:ini_pkg、add_concept、add_imp,我想用它们填充一些列表,然后处理存储在其中的数据。对于每个概念,我调用相应的过程,但在插入 300 次后会引发异常。

@Override
public boolean save(XX fact) {
try {
StoredProcedureQuery query = manager.createStoredProcedureQuery("COM.TEST.INI_PKG");
query.registerStoredProcedureParameter("UUID", String.class, ParameterMode.IN);
query.setParameter("UUID", fact.getUuid());
query.execute();

if (fact.getConcepts() != null && !fact.getConcepts().isEmpty()) {
for (Iterator<Concept> iterator = fact.getConcepts().iterator(); iterator.hasNext();) {
Concept concept = iterator.next();

StoredProcedureQuery addQuery = manager
.createStoredProcedureQuery("COM.TEST.ADD_CONCEPT");
addQuery.registerStoredProcedureParameter("P_CLAVPROD", String.class, ParameterMode.IN);
addQuery.setParameter("P_CLAVPROD", concept.getClaveProdServ());
addQuery.execute();

if (concept.getImp() != null && !concept.getImp().isEmpty()) {
...
}
}
}

...

queryInsert.execute();
manager.close();
} catch (PersistenceException pe) {
System.out.println("Error : " + pe.getMessage());
}
return true;
}

包中的相关程序

TYPE R_CONCEPTO IS RECORD (
CLAVPRODSERV VARCHAR2(20)
timpuesto T_IMPUESTO
);
TYPE T_CONCEPT IS TABLE OF R_CONCEPT;
tconcept T_CONCEPT;

PROCEDURE INI_PKG(UUID IN VARCHAR2) AS
BEGIN
IDFAC := COM.SEQ_IDFACT.NEXTVAL;
P_UUID := UUID;
tconcept := t_concept();
END INI_PKG;

PROCEDURE ADD_CONCEPT(P_CLAVPROD IN VARCHAR2) AS
BEGIN
tconcept.EXTEND;
tconcept(tconcept.LAST).CLAVPRODSERV := P_CLAVEPROD;
END ADD_CONCEPT;

我不知道为什么我的游标数量超出了上限(最大值为 300)。这里有什么建议吗?

最佳答案

我不是 Java 专家,但请确保在使用完它们后关闭光标。 Oracle 有最大并发打开游标数。它可以设置得更高,但最好关闭它们。你能在执行后关闭java循环中的addQuery吗?

关于java - 调用包存储过程时超出了最大游标数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55127577/

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