如何通过jdbc从数据库函数中获取STRUCT中的CLOB(我被困在ORA-22922不存在的LOB值中)

时间:2019-06-25 05:23:06

标签: java oracle jdbc

我尝试使用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。有办法吗?谢谢!

0 个答案:

没有答案