При выполнении функции oracle возникает недопустимое исключение шаблона имени. который является возвращаемым типом sql как запись, которая присутствует в пакете. Если тип присутствует в каталоге типов, он работает нормально. Но я не могу выполнить, если он присутствует в каталоге пакета. Пожалуйста, помогите мне в этом.
create or replace PACKAGE pkg_name
TYPE sqlTypeName
IS
RECORD(
firstVariable NUMBER,
secondVariable VARCHAR);
TYPE sqlTypeName_c is TABLE Of sqlTypeName INDEX BY pls_integer;
FUNCTION functionName() RETURN sqlTypeName_c
В java-коде:
Map typeMap = conn.getTypeMap();
typeMap.put("sqlTypeName_c", Array.class);
typeMap.put("sqlTypeName", Struct.class);
CallableStatement clstmt= null;
clstmt = conn.prepareCall("{ ? = call pkg_name.functionName() }");
clstmt.registerOutParameter(1, Types.ARRAY, "pkg_name.sqlTypeName_c");
clstmt.executeUpdate();
Array returnvalue = clstmt.getArray(1);
Это не будет работать, поскольку тип объявлен в пакете. Вам нужно будет объявить тип sqlTypeName TYPE внутри схемы.
Вот некоторые из вопросов, которые касаются этой проблемы - Java- PLSQL-Call Table записей из java
Извлечение типа таблицы Oracle из хранимой процедуры с использованием JDBC