获取异常 ORA-00942:表或视图不存在 - 插入到现有表中时

2022-09-03 09:18:24

当我尝试将一批行插入到现有表中时,我遇到了以下异常

ORA-00942:表或视图不存在

我可以确认该表存在于数据库中,并且我可以使用oracle sql developer将数据插入该表中。但是当我尝试在java中使用precreadstatement插入行时,它的抛出表不存在错误。

请在下面找到错误的堆栈跟踪

java.sql.SQLException: ORA-00942: table or view does not exist

    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289) 
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573) 
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1889)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout>>(OracleStatement.java:2709)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
    at quotecopy.DbConnection.insertIntoDestinationDb(DbConnection.java:591)
    at quotecopy.QuoteCopier.main(QuoteCopier.java:72) 

任何人都可以提出此错误的原因吗?

更新:问题已解决

我的数据库连接属性或表或视图名称没有问题。这个问题的解决方案非常奇怪。我正在尝试插入的一列是Clob类型。由于我之前在oracle db中处理clob数据时遇到了很多麻烦,因此尝试将clob setter替换为临时字符串setter,并执行相同的代码,没有任何问题,并且所有行都已正确插入!!!.

断续器peparedstatement.setClob(columnIndex, clob)

已替换为

peparedstatement.setString(columnIndex, “String”)

为什么错误表或视图确实存在错误,错误是因插入 clob 数据时引发的错误。你们任何人都可以解释一下吗?

非常感谢您的回答和评论。


答案 1

如果该表存在,但您对此没有任何权限,则 Oracle 也会报告此错误。因此,如果您确定该表在那里,请检查赠款。


答案 2

setCLOB() 似乎存在一些问题,在某些情况下,当目标表确实存在并且具有正确的特权时,它会导致 ORA-00942。我现在遇到了这个确切的问题,我可以通过简单地不将CLOB绑定到同一个表中来使ORA-00942消失。

我尝试过使用java.sql.Clob和setCLOB()和oracle.jdbc.CLOB的setClob(),但结果相同。

正如你所说,如果你作为一个字符串绑定,问题就会消失 - 但这会将你的数据大小限制为4k。

从测试来看,当事务在绑定 CLOB 之前在会话上打开时,它似乎会触发。当我解决了这个问题后,我会反馈...检查 Oracle 支持。


推荐