0

参见示例:

ORA-00942: 表或视图不存在: 我如何找到它正在谈论的表或视图

基本上在这样的情况下,Oracle 会做出如下响应:SQL 错误:ORA-00942:表或视图不存在

使用像 Hibernate 这样的 ORM 库时来自 Oracle 的晦涩错误消息并不是一生中只有一次的经历。为什么 Oracle 不简单地提及不存在的表或视图的名称?为什么示例问题中发布了所有审计和其他复杂的“解决方案”?

简而言之:对于甲骨文看似糟糕的错误反馈是否有一些合理的技术解释,或者这更可能是由于甲骨文几乎“垄断”的流行状态而缺乏改进动力的结果(甲骨文方面)?(或其他?与 ORM 开发人员和数据库供应商缺乏协调?)

实际上,这也引出了其他竞争(特别是 OSS)数据库是否提供更好的反馈的问题,我真的不知道,所以这可能不仅仅适用于 Oracle。

4

2 回答 2

3

缺少表名可能是为了帮助防止代码知识泄漏。典型示例 - 如果 webapp 编码错误,并且像这样的错误传播到顶层并显示给用户,那么邪恶的人可以使用它来 SQL 注入站点或做其他坏事。

于 2010-10-03T19:33:15.000 回答
1

“简而言之:对于甲骨文看似糟糕的错误反馈是否有一些合理的技术解释,或者这更可能是由于甲骨文几乎‘垄断’的流行状态而缺乏改进动力的结果?”

请记住,Oracle 是一项古老的技术,可以追溯到三十年前。有一个巨大的现存代码库。因此,改变基本行为可能会产生广泛的影响。

您是否将其视为“理性”或“技术”解释是一个品味问题。

我们大多数使用 Oracle 数据库的人都学会了忍受它的怪癖。例如,揭示导致 ORA-00942 错误的表是一件简单的事情:

prompt Dropping non_existent_table

drop table non_existent_table
/

它并不优雅,但不知道我们的目标模式的条件远非优雅。事实上,盲目地发出 DROP TABLE 语句是模式管理的笨拙方法。

“这也引出了其他竞争(特别是 OSS)数据库是否提供更好反馈的问题”

当然,等效的 MySQL 错误 MySQL Error: 1146 命名了表。当然,Oracle 现在拥有 MySQL,因此它作为竞争 DBMS 的地位值得商榷 :)

于 2010-10-03T21:01:25.697 回答