Я пытаюсь создать универсальный класс, который будет использоваться во всех моих приложениях, чтобы выполнять вызовы хранимых процедур с использованием трех переменных: имени StoredProcedure, карты входных переменных и карты выходных переменных.
При возврате этих вызовов должен возвращаться результат хранимой процедуры, который пользователь передал в функцию.
Я пытался использовать разные способы вызова хранимой процедуры, но мне пришлось использовать JPAсделать это.Я обыскиваю весь интернет, но кажется, что ни у кого не было проблем с использованием ARRAYS в качестве входного аргумента в Java.
Я уже поставил в качестве аргументов объект [], но я получаю сообщение об ошибке, говорящее, что «переменная XXX не определена»
Глобальная функция для вызова хранимых процедур
@Override
public List<Object> executeArrayProcedure(String procedureName, Map<String, Object[]> inputParams, Map<String, Class> outputParams) {
List<Object> results = new ArrayList<>();
try {
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery(procedureName);
// register parameters
for (Entry<String, Object[]> entry : inputParams.entrySet()) {
storedProcedure.registerStoredProcedureParameter(entry.getKey(), entry.getValue().getClass(),ParameterMode.IN);
// set parameters
storedProcedure.setParameter(entry.getKey(), entry.getValue());
}
for (Entry<String, Class> entry : outputParams.entrySet()) {
storedProcedure.registerStoredProcedureParameter(entry.getKey(),entry.getValue(), ParameterMode.OUT);
}
// execute SP
storedProcedure.execute();
// get result
for (Entry<String, Class> entry : outputParams.entrySet()) {
results.add(storedProcedure.getOutputParameterValue(entry.getKey()));
}
} catch (Exception e) {
e.printStackTrace();
}
return results;
}
Сохраненная процедура сохранена в моей базе данных
CREATE OR REPLACE TYPE intArrType AS VARRAY(100) OF NUMBER;
create or replace PROCEDURE testing (t_in IN intArrType, yout OUT number) IS
BEGIN
yout := 0;
FOR i IN 1..t_in.count LOOP
yout := yout + t_in(i);
END LOOP;
END;
declare
yout number;
begin
testing(intArrType(1,2,3),yout);
DBMS_OUTPUT.PUT_LINE(yout);
end;
Ошибка при прохождении Объект []
erro: org.hibernate.exception.SQLGrammarException: Error calling CallableStatement.getMoreResults
ORA-06550:
linha 1, coluna 7:\nPLS-00306: wrong number or types of arguments in call to 'testing'\n
ORA-06550: linha 1, coluna 7:\n
PL/SQL: Statement ignored\n
У вас есть какой-нибудь совет для меня?