Я пытаюсь использовать 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 без ошибок. Есть ли способ сделать это? Спасибо!