ORA-00942: 使用 iBatis 的表或视图不存在
Posted
技术标签:
【中文标题】ORA-00942: 使用 iBatis 的表或视图不存在【英文标题】:ORA-00942: table or view does not exist using iBatis 【发布时间】:2013-07-02 16:00:42 【问题描述】:我正在使用 MyBatis 3 创建一个请求(见下文),但是,我得到: ORA-00942: 表或视图不存在 其中 SYNONYM_A 是另一个数据库中表的公共同义词...
我知道这个例子并没有真正的帮助,但真正的问题是,“Batis 中的同义词有特殊语法吗?”有没有人这样做,或者失败了,可以告诉我,所以我不会花很多精力,如果它在 Batis 中无效?
@Select("select * from SYNONYM_A where some_det_key in (SELECT DATA_KEY FROM SOME_PARENT_TABLE WHERE PARENT_KEY = 1234 AND (ATTACH_PARENT_FLG = 1 or ATTACH_PARENT_FLG is null) AND DATA_SRC = 'LV_SOME_DET') ORDER BY pair
【问题讨论】:
如果您直接从 sqlplus 和相同的 db 用户运行查询会怎样。是否有数据库链接设置?所有的赠款都正确吗? 是的,这确实适用于 sqlplus 【参考方案1】:为 SYNONYM_A 是其同义词的表再次提供从 PARENT 模式到当前模式的选择授权。
SYNONYM_A 是表的同义词还是父模式中另一个 SYNONYM 的同义词? 如果是这样,您需要再次从实际表所在的最终基本模式提供授权'WITH GRANT OPTION'
【讨论】:
我有没有提到 SYNONYM_A 是公共同义词?这是否意味着不需要赠款,因为每个人都可以使用? -- 我已经在 SQLPLUS 中为多个用户测试过,他们都成功了...... SYNONYM_A 被定义为“SOME_TABLE”@“CONNECTION_TO_ANOTHER_DATABASE”的创建或替换公共同义词“SYNONYM_A”; 同义词和授权是两个不同的对象。同义词是命名空间问题。【参考方案2】:公共同义词并不意味着父表所在的模式不需要授权(如果同义词和表位于两个不同的模式中,即)。你需要澄清你对公共同义词的概念:)。
但这不是重点。 做吧:
SELECT * SOME_TABLE"@"CONNECTION_TO_ANOTHER_DATABASE;
如果这给你 ORA-XXXX: 表或视图不存在,那么这就是原因。
有两种可能:
1.CONNECTION_TO_ANOTHER_DATABASE 已损坏/不存在。 您可以通过以下查询来检查:
Select sysdate from duals@CONNECTION_TO_ANOTHER_DATABASE;
Select * from user_objects@CONNECTION_TO_ANOTHER_DATABASE;
如果这也给你同样的错误,那么就是这样,你的 CONNECTION_TO_ANOTHER_DATABASE 已经消失了。
如果这没有给出任何错误并且给出了一些有效的 o/p 那么:
2.可能远程数据库中的“SOME_TABLE”不存在!
【讨论】:
但是,正如我对“OldProgrammer”所说,该语句在 SQLPLUS 中有效,但在通过 MyBatis 的 JDBC 中无效。我已经检查了连接,它是相同的数据库/用户/密码,因为我将它们注销......我只是想知道 Batis 或 JDBC 是否存在引用 Synonyms 的问题。跨度> 【参考方案3】:答案是……
我连接到了错误的数据库实例!!我构建了扩展的 AbstractRoutingDataSource,并从主数据库中提取数据源的服务器名称。我发现另一个人错误地填充了此表,并将我指向一个不存在同义词的数据库。
感谢您的回复和您的时间。
【讨论】:
以上是关于ORA-00942: 使用 iBatis 的表或视图不存在的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLSyntaxErrorException:ORA-00942:netbeans 8.0.1 中的表或视图不存在错误消息