您偶尔会在运行SQL语句时看到ora-00942错误。 它有几个原因,并且像往常一样,错误语法不是最具描述性的。 如果您要解决此问题,并想知道如何解决ora-00942错误,请继续阅读。
据我所知,ora-00942错误的三个主要原因是:
- 用户权限不足
- 该表或视图实际上不存在
- 该表或视图在不同的架构中
我将向您展示如何解决每个问题。
修复ora-00942错误
首先,有一点免责声明。 我不是DBA,我是Windows管理员以及台式机和服务器硬件技术人员。 我知道如何运行SQL,但不具备任何专业知识,当然也没有达到可以解决问题的水平。 我不得不向我的Oracle DBA好友寻求帮助,因此在撰写本文时,他的全部才华横溢。
导致ora-00942错误的三个原因的列表并不详尽。 显然还有其他随机原因,但是这三个原因显然是最常见的。
用户权限不足
ora-00942错误的一个主要原因是用户没有足够的特权来访问有关表。 您可以通过运行两个查询来检查。
-列出用户或角色的系统特权SELECT * FROM dba_sys_privs WHERE被授予者IN(&user_role,'PUBLIC');
-列出用户或角色的对象特权
SELECT被授权者,所有者||'。
这两个命令将告诉您有关用户是否具有运行命令的正确权限。 如果用户具有正确的特权,请继续下一步。 如果用户没有正确的特权,则将其授予他们,或要求您的数据库管理员执行。
如果您使用的架构的用户具有INSERT特权,但没有SELECT特权,则也可能发生ora-00942错误。 再次,检查特权级别并将SELECT添加到列表中,或要求DB Admin来执行此操作。 显然,必须为每个架构授予特定的SELECT特权,否则您仍然会看到ora-00942错误。
该表或视图实际上不存在
导致ora-00942错误的原因可能是查询语法不正确或表不存在。 尽管这似乎是逻辑上的第一手开始,但我可以确信的是,用户特权是导致错误的第一大原因。 第二个是表不存在或表语法错误。
要检查表是否存在,请首先检查查询的语法。 如果语法正确,请运行此查询。
从所有对象中选择所有者,对象名称,对象类型,其中对象类型IN('TABLE','VIEW')AND object_name ='YOUR_TABLE_NAME';
在最后一行,在看到“ YOUR_TABLE_NAME”的位置插入实际的表名。 这绝对可以告诉您您要查询的表是否存在。 如果没有表返回,则您正在查询的表在模式或数据库中不存在。
如果您正在使用的系统具有“表”菜单,则可以根据需要手动检查表,但是上述查询可以完成工作。
该表或视图在不同的架构中
如果该用户具有特权并且该表存在,并且您仍然看到ora-00942错误,则很可能是该模式造成的。 如果要管理多个架构,则可以轻松针对非您自己的架构运行查询。 当您忙于应对时,这是一个简单的错误。
如果可以,请手动检查架构,或者在查询的FROM行中添加架构名称。 如果您没有新架构的正确权限,则会再次看到ora-00942错误。 返回第一个用户权限修复程序,并检查相应的架构或让您的DBA替您完成。
如上所述,我为此事咨询了我的Oracle DBA伙伴,因此,所有人的辛勤工作都归功于他。 如果您在此处发现任何错误或遗漏,则这些错误或遗漏属于我自己。 如果您有任何遗漏或弄错了什么,请在评论部分让我知道,我将予以纠正。
如果您知道还有其他方法可以修复ora-00942错误,请在下面告诉我们!