我尝试使用jdbc从Oracle数据库获取CLOB。 CLOB存储在由函数返回的STRUCT内。尝试从STRUCT中提取CLOB时,我得到了ORA-22922不存在的LOB值。
如果我尝试直接读取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。有办法吗?谢谢!