这当然是可行,我现在就这样做了,java sources里取得数据后先插入数据库中的一个blob字段,返回一个成功标志,java应用程序端取得成功标志,就去数据库中的blob字段取出数据。
但绕了弯子,还需要定期清理数据库的这些无用的数据。[/quote]
其实你可以读取完了之后就清除这个数据,当你的程序稳定之后。或者在每次插入之前先清空表中的数据。对于JAVA函数和JAVA存储过程研究较少。
或者是可以尝试在函数中声明一个long raw的变量,JAVA函数先返回到变量,然后再return变量作为返回值,看看是否有效果。
----test函数----
create or replace function test(url varchar2) return LONG RAW as
language java name 'RemoteFileObject.getRemoteFileObject(java.lang.String) return byte[]';
错误信息
java.sql.SQLException: ORA-24345: 出现截断或空读取错误
ORA-06512: 在 "DCM.TEST", line 1
ORA-06512: 在 line 1
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:212)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:951)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1160)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4223)
at MainJavaSource.main(MainJavaSource.java:63)