Как получить CLOB в STRUCT из функции базы данных через jdbc (я застрял на несуществующем значении большого объекта ORA-22922) - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь использовать jdbc для получения CLOB из db оракула. CLOB хранится внутри STRUCT, который возвращается функцией. При попытке извлечь CLOB из STRUCT я получаю несуществующее значение большого объекта ORA-22922.

Если я попытаюсь прочитать CLOB напрямую (без STRUCT), я смогу прочитать все данные успешно.

// works
CallableStatement cs = connection.prepareCall("BEGIN ? := some_package.some_function().some_clob; END;");
cs.registerOutParameter(1, Types.CLOB);
cs.execute();
System.out.println(cs.getClob(1).getSubString(1l, (int)cs.getClob(1).length()));
cs.close();

// dose not work
cs = connection.prepareCall("BEGIN ? := some_package.some_function(); END;");
cs.registerOutParameter(1, Types.STRUCT, "some_package.some_type".toUpperCase());
cs.execute();
System.out.println(cs.getObject(1));
System.out.println(Arrays.toString(((Struct)cs.getObject(1)).getAttributes()));
System.out.println(((Clob)((Struct)cs.getObject(1)).getAttributes()[0]).length()); //ORA-22922: nonexistent LOB value

Я ожидаю, что смогу прочитать CLOB без ошибок. Есть ли способ сделать это? Спасибо!

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