Вот мой Oracle объект TYPE_ITEM_OBJ:
create or replace TYPE TYPE_ITEM_OBJ AS OBJECT (
AGENT type_agent_obj,
DATDEB DATE,
DATFIN DATE,
CONSTRUCTOR FUNCTION Type_item_obj RETURN SELF AS RESULT,
MEMBER PROCEDURE set_agent(agent IN type_agent_obj),
MEMBER PROCEDURE set_datdeb(datdeb IN DATE),
MEMBER PROCEDURE set_datfin(datfin IN DATE),
);
Процедура, которую я вызываю на стороне java, возвращает массив TYPE_ITEM_OBJ.
У меня никогда не было проблем с преобразованием массива объекта java на стороне, но здесь проблема связана с тем фактом, что мой возвращенный объект имеет другой объект в качестве первого атрибута.
Обычно я делаю эту сторону java после того, как я получить возвращенный результат: (rs - мой resultSet).
Примечание: метод является общим, поэтому я не знаю, что находится внутри результата, и мне нужно получить имена столбцов объекта oracle, чтобы реализовать. Чтобы получить это, я использую метаданные моего объекта STRUCT.
STRUCT structure = ((STRUCT) rs.getObject(2));
StructDescriptor descriptor = structure.getDescriptor();
ResultSetMetaData metadata = descriptor.getMetaData();
for (int j = 0; j < metadata.getColumnCount(); j++) {
String columnName = metadata.getColumnName(j + 1);
String columnType = metadata.getColumnTypeName(j + 1);
....
}
На этот раз я хотел бы получить структуру внутри моего Oracle объекта. Итак, я сделал так:
STRUCT structure = ((STRUCT) rs.getObject(2));
STRUCT agentStructure = (STRUCT)structure.getOracleAttributes()[0];
StructDescriptor descriptor = agentStructure .getDescriptor();
ResultSetMetaData metadata = agentStructure .getMetaData();
for (int j = 0; j < metadata.getColumnCount(); j++) {
String columnName = metadata.getColumnName(j + 1);
String columnType = metadata.getColumnTypeName(j + 1);
....
}
metadata.getColumnCount - это правильно; metadata.getColumnTypeName (j + 1) является правильным
, но metadata.getColumnName (j + 1) выдает исключение (данные не найдены)
Возможно, проблема связана с тем фактом, что getOracleAttributes () [0] возвращает Datum, который, возможно, не является Stuct, каким он должен быть (например, отсутствуют некоторые метаданные).
Как я могу получить этот внутренний STRUCT (agentStructure), чтобы я мог использовать getColumnName для метаданных ? Или где метаданные с именами столбцов для этой внутренней структуры.
Надеюсь, я найду специалиста.