Java Oracle: получить правильную внутреннюю структуру - PullRequest
0 голосов
/ 30 апреля 2020

Вот мой 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 для метаданных ? Или где метаданные с именами столбцов для этой внутренней структуры.

Надеюсь, я найду специалиста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...