Java - получить данные из хранимой процедуры plsql с параметрами, определенными пользователем - PullRequest
0 голосов
/ 16 ноября 2018

Я должен вызвать хранимую процедуру pl / sql из Java. Хранимая процедура имеет входные и выходные параметры, которые определяются пользователем как объекты. Я определил классы, которые реализуют класс SQLData для отображения объекта базы данных в объект Java.

Это мой код для вызова хранимой процедуры

private String procedure = "{call READ_METADATA(?,?,?,?)}";
Connection conn = DriverManager.getConnection(dbConnectionUrl, username, password);
CallableStatement cstmt = conn.prepareCall(procedure);

Map metaDataMap = conn.getTypeMap();
metaDataMap.put("METADATA", Class.forName("mypackage.TMetaData"));
conn.setTypeMap(metaDataMap);

Map resultMap = conn.getTypeMap();
resultMap.put("RESULT", Class.forName("mypackage.TResult"));
conn.setTypeMap(resultMap);

Object[] callerArray = new Object[4];

callerArray[0] = "";
callerArray[1] = "";
callerArray[2] = codeApplication;
callerArray[3] = codeFacility;
Struct struct = conn.createStruct("CALLER", callerArray);

cstmt.setObject(1, struct);
cstmt.setString(2, fdnSequenceId.toString());
cstmt.registerOutParameter(3, OracleTypes.STRUCT, "METADATA");
cstmt.registerOutParameter(4, OracleTypes.STRUCT, "RESULT");
cstmt.executeUpdate(); 

Чем я получаю данные из хранимой процедуры таким образом

TMetaData metadati = (TMetaData)cstmt.getObject(3, metaDataMap);
TResult result = (TResult)cstmt.getObject(4, resultMap);

Это определение хранимой процедуры

CREATE OR REPLACE PROCEDURE READ_METADATA
(
    param_caller IN CALLER,
    param_sequence_id IN VARCHAR2,
    param_metadata OUT METATADA,
    param_result OUT RESULT
);

Проблема в том, что объект METADATA содержит значение NULL, а объект результата содержит '???' во всех полях.

Если я вызываю хранимую процедуру из SQL Developer, она работает.

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