Java 为什么在使用JDBC插入单行时会出现ORA-01422错误
我看到了许多与此特定错误相关的问题,其中大多数与Java 为什么在使用JDBC插入单行时会出现ORA-01422错误,java,oracle,jdbc,Java,Oracle,Jdbc,我看到了许多与此特定错误相关的问题,其中大多数与选择进入操作有关 不过,在本例中,我尝试插入一行,但没有找到这个特定问题的任何答案 我正在使用以下代码: final String insertSQL = "INSERT INTO XMLTYPETEST_XMLTYPE (ACTIVITYGUID, XMLDATA) VALUES (:1, XMLType(:2))"; final String guid = "BFACFEB-8ACE-4145-B04A-759822E0AA7D"; final
选择进入操作有关
不过,在本例中,我尝试插入一行,但没有找到这个特定问题的任何答案
我正在使用以下代码:
final String insertSQL = "INSERT INTO XMLTYPETEST_XMLTYPE (ACTIVITYGUID, XMLDATA) VALUES (:1, XMLType(:2))";
final String guid = "BFACFEB-8ACE-4145-B04A-759822E0AA7D";
final String xml = "<Activity><Changes></Changes></Activity>";
try (OraclePreparedStatement stmt =
(OraclePreparedStatement) conn.prepareStatement(insertSQL)) {
stmt.setString(1, guid);
stmt.setString(2, xml);
stmt.execute();
} catch (SQLException ex) {
Logger.getLogger(DBConnectionTest.class.getName())
.log(Level.SEVERE, null, ex);
fail();
}
我尝试了各种对象组合和set*()
方法来设置XMLData参数以及使用executeUpdate()
,都得到了相同的结果:
ORA-01422:精确获取返回的行数超过请求的行数
如果库版本中有任何线索,以下是相关的依赖项:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/oracle/xdb -->
<dependency>
<groupId>oracle</groupId>
<artifactId>xdb</artifactId>
<version>1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle/xmlparserv2 -->
<dependency>
<groupId>com.oracle.database.xml</groupId>
<artifactId>xmlparserv2</artifactId>
<version>19.3.0.0</version>
</dependency>
com.oracle
ojdbc8
12.2.0.1
神谕
xdb
1
com.oracle.database.xml
xmlparserv2
19.3.0.0
谢谢。我越想它,就越怀疑不匹配的库版本。我用以下版本替换了两个库:
com.oracle.database.xml
xmlparserv2
12.2.0.1
com.oracle.database.xml
xdb6
12.2.0.1
这解决了问题/facepalm您确定这段代码会引发错误吗?目标表上是否有执行某些操作并引发错误的触发器?是否有触发器值得怀疑。我自己创建这个表只是为了将表与XMLType和CLOB进行比较。在原始问题中添加了表DDL。错误发生在stmt.execute()行。