Java 如何从CallableStatement获取所有参数绑定信息?

Java 如何从CallableStatement获取所有参数绑定信息?,java,oracle,jdbc,callable-statement,Java,Oracle,Jdbc,Callable Statement,我正在处理使用一些复杂逻辑在JDBC CallableStatement中绑定入和出参数的遗留代码。代码似乎正在为IN和OUT参数绑定正确的类型,但在执行CallableStatement时,Oracle存储过程会引发以下异常: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'STORED_PROC_ABC' ORA-06550: line 1, column 7: PL

我正在处理使用一些复杂逻辑在JDBC CallableStatement中绑定入和出参数的遗留代码。代码似乎正在为IN和OUT参数绑定正确的类型,但在执行CallableStatement时,Oracle存储过程会引发以下异常:

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'STORED_PROC_ABC'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
第1行第7列:
”没有帮助。它没有指向存储过程中的任何内容

我已经编写了一个简单的独立测试用例来调用存储的proc。使用与遗留代码相同的参数和绑定类型,它成功了

我需要的是一种方法来比较遗留代码和独立测试中的两个CallableStatement对象,看看它们有什么不同

有没有办法从CallableStatement获取相关的参数绑定信息(值和类型)?如果有第三方库可以做到这一点,那就太好了,否则我需要一种方法来挖掘各种绑定


谢谢。

您可以使用CallableStatement.getParameterMetaData()命令

JDBC CallableStatement对象设计用于表示对数据库服务器中存储过程的调用

使用
java.sql接口参数metadata

可用于获取有关类型和类型的信息的对象 PreparedStatement对象中参数的属性


回复:下面的前两个答案-CallableStatement.getParameterMetaData()不适用于Oracle驱动程序。它只是给出了“不受支持的特性”例外。这是一个长期存在的问题,是否可以在会话中启用10046跟踪(级别为12)并查看SQL和绑定变量?这是我第一次听说10046跟踪。它是在每次会话的基础上启用的,我不确定这意味着什么。我是否必须在同一CallableStatement中启用它(即,在调用存储过程之前执行“ALTER SESSION…”语句)?Dean-10046是一个可以为给定会话设置的事件,级别4将为您提供使用的绑定变量,级别12将提供绑定和等待信息。但是,在这种情况下,甚至不会执行调用,因为它在解析阶段失败了。所以这没用。很抱歉我尝试了8级和12级的10046事件,但没有得到任何输出,可能是因为您提到的原因。但是,在其他情况下,这是值得知道的。我将接受这个答案,并警告CallableStatement.getParameterMetaData()不适用于Oracle驱动程序。