У меня есть пакет 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). Любые предложения здесь?