【发布时间】:2020-06-17 12:39:13
【问题描述】:
我需要知道 Oracle CallableStatement 是否进行 DB 调用来编译(或绑定)存储过程中的 IN/OUT 参数?
如果答案是肯定的,那么 JDBC 驱动程序向 DB 发送的请求是什么?
【问题讨论】:
标签: java database oracle jdbc callable-statement
我需要知道 Oracle CallableStatement 是否进行 DB 调用来编译(或绑定)存储过程中的 IN/OUT 参数?
如果答案是肯定的,那么 JDBC 驱动程序向 DB 发送的请求是什么?
【问题讨论】:
标签: java database oracle jdbc callable-statement
您的问题不清楚,但也许这会有所帮助。
OracleConnection.prepareCall 不会进行数据库往返。
OracleCallableStatement.setXXX 不会进行数据库往返。
OracleCallableStatement.registerOutParameter 不会进行数据库往返。
OracleCallableStatement 上唯一总是使数据库往返的方法是执行。
OracleCallableStatement.getXXX 可能会进行数据库往返。这主要取决于 OUT 参数的类型。如果 OUT 参数是 ARRAY、STRUCT、REF 或 OPAQUE,如果驱动程序尚未看到该类型的类型描述,则可能存在数据库往返。类型描述由连接缓存,因此一旦驱动程序检索到类型描述,它就不必进行数据库往返来构造该类型的实例。如果在初始调用中未检索到整个值,则对 BLOB、CLOB、NCLOB 或 BFILE 类型调用 getString 或 getBytes(或其他需要完整值的 getXXX)可能需要数据库往返。对 BLOB、CLOB、NCLOB 或 BFILE 输出参数调用 getBlob、getClob、getNClob 或 getBfile(视情况而定)不会执行数据库往返。
【讨论】: