Java/Oracle:在循环的第二次迭代(并非所有变量都绑定)中执行准备好的语句失败。为什么?

Java/Oracle:在循环的第二次迭代(并非所有变量都绑定)中执行准备好的语句失败。为什么?,java,oracle,jdbc,prepared-statement,oracleclient,Java,Oracle,Jdbc,Prepared Statement,Oracleclient,我正在调试一个Java应用程序,它通过瘦客户端连接到Oracle DB 代码如下所示:(我试图简化这里的用例,所以请原谅我,如果t实际上不滑稽) Connection conn=myEnv.getDbConnection(); CallableStatement call=conn.prepareCall( “{?=调用SomePackage.SomeFunction(?)”; registerOutParameter(1,OracleTypes.CURSOR); 对于(int runCount

我正在调试一个Java应用程序,它通过瘦客户端连接到Oracle DB

代码如下所示:(我试图简化这里的用例,所以请原谅我,如果t实际上不滑稽)

Connection conn=myEnv.getDbConnection();
CallableStatement call=conn.prepareCall(
“{?=调用SomePackage.SomeFunction(?)”;
registerOutParameter(1,OracleTypes.CURSOR);

对于(int runCount=0;runCount您是否尝试将
call.clearParameters()
添加到循环中?可能会重置对象上需要再次执行的某些内部状态。

通过Oracle支持调用获得的解释是,此版本的Java(1.3)与新的Oracle不兼容。Java 1.4修复了该问题。

如果将registerOutputParameter()与setString()一起放入循环中,会有帮助吗?遗憾的是,正如我在Q中所说,它没有:(您使用的是最新的驱动程序吗?从目录路径中可以看到Oracle客户端版本是10.2.0
Connection conn = myEnv.getDbConnection();
CallableStatement call = conn.prepareCall(
         "{ ? = call SomePackage.SomeFunction (?)}");
call.registerOutParameter(1, OracleTypes.CURSOR);
for (int runCount = 0; runCount <= 1; runCount++) {
    currency = getCurrency(runCount); // NOTE: [0]=CAD, [1]=USD
    call.setString(2, currency);
    try { call.execute(); } catch { // BREAKS HERE! }
    ResultSet rset = (ResultSet)call.getObject(1);
    ... more code that I think is irrelevant as it does not use/affect "call"
}