ORA-00932: 数据类型不一致: 应为 SYS.AQ$_JMS_TEXT_MESSAGE 得到 SYS.AQ$_JMS_TEXT_MESSAGE

ORA-00932: inconsistent datatypes: expected SYS.AQ$_JMS_TEXT_MESSAGE got SYS.AQ$_JMS_TEXT_MESSAGE

使用较新版本的 Oracle DB (12.2.0.1),我们开始收到 ORA-00932,因为代码可以很好地与较旧的 DB 服务器配合使用。 此外,驱动程序报告异常的奇怪细节:

ORA-00932: inconsistent datatypes: expected SYS.AQ$_JMS_TEXT_MESSAGE got SYS.AQ$_JMS_TEXT_MESSAGE

你可以看到期望的类型名称和得到的类型名称相同。

Caused by: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-00932: inconsistent datatypes: expected SYS.AQ$_JMS_TEXT_MESSAGE got SYS.AQ$_JMS_TEXT_MESSAGE
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:389)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:382)
        at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:600)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
        at oracle.jdbc.driver.T4Caqe.doOAQEQ(T4Caqe.java:355)
        at oracle.jdbc.driver.T4CConnection.doEnqueue(T4CConnection.java:3938)
        at oracle.jdbc.driver.PhysicalConnection.enqueue(PhysicalConnection.java:10076)
        at oracle.jms.AQjmsProducer.jdbcEnqueue(AQjmsProducer.java:1096)
        ... 13 more

问题是由独立的 Java 应用程序引发的,使用以下 AQ 驱动程序库:

aqapi.jar;javax.jms_1.1.4.jar;jta-1.1.jar

使用的 ojdbc 驱动程序版本:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_30-b03 (Sun Microsystems Inc.)
Implementation-Vendor: Oracle Corporation
Implementation-Title: JDBC
Implementation-Version: 11.2.0.3.0
Repository-Id: JAVAVM_11.2.0.3.0_LINUX_110823
Specification-Vendor: Sun Microsystems Inc.
Specification-Title: JDBC
Specification-Version: 4.0
Main-Class: oracle.jdbc.OracleDriver
sealed: true

当我们开始使用与 Oracle 数据库服务器相同的 jdbc 驱动程序版本时:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Implementation-Title: JDBC
Implementation-Version: 12.2.0.1.0
sealed: true
Repository-Id: JAVAVM_12.2.0.1.0_LINUX.X64_161213
Specification-Vendor: Sun Microsystems Inc.
Specification-Title: JDBC
Created-By: 25.91-b14 (Oracle Corporation)
Specification-Version: 4.0
Implementation-Vendor: Oracle Corporation
Main-Class: oracle.jdbc.OracleDriver

AQ JMS 驱动程序开始运行良好。我找不到任何 Oracle 文档说明,即 11.2 jdbc 驱动程序与 12.2 ORA DB 服务器不兼容,甚至不支持 AQ JMS 实现 (aqapi.jar)。