面对一个错误:表或​​视图不存在

问题描述:


我正在使用插入语句,并试图插入数据到数据库表中。我正在使用存储过程。
但我这样做时出现此错误。
面对一个错误:表或​​视图不存在

消息:ORA-00942:表或视图不 不存在ORA-06512


我中检查表/存储过程是存在或不存在和一切就绪。在表名或sp中也没有错字。如果我从查询编辑器运行SP的一部分,它工作正常,但是当我执行整个SP时,它会引发错误。


我试图斯蒂芬提供的步骤,但因为我有同样的用户/所有者登录当我运行格兰特命令它给了我一个错误说“不能授予/撤销对自己的”。
此外还有一个补充。我有一个存储过程SP1,我在其中使用select语句作为

Select a from table_name where condition; 

当我单独执行它时,它会返回一些结果。但是当我执行sp时,它会在写入的同一行发出错误。


任何人都可以帮我解决这个问题。我正在使用SQL +。
预先感谢 维杰

+1

很多可能性:连接到错误的数据库?以表格的名义输错?你必须给我们更多的东西来继续。 – 2011-02-07 16:01:39

+0

你能告诉我们你的程序或插入语句吗? – CristiC 2011-02-07 16:02:15

贾斯廷的回答是正确的,但让我扩大一点。

大家都说那张桌子不存在并没有阅读你的整篇文章。既然你可以:

如果我运行从查询编辑器SP的一部分,它工作正常

显然表是存在的。 显然你有一些访问它。否则,这显然不起作用。

但是当我执行整个SP时,它会引发错误。

这是因为Oracle区分直接授予的权限和通过角色授予的权限。

说我这样做:

Create Table TABLE_A 
Create Role READ_ONLY 
Grant Select on TABLE_A to READ_ONLY 
Grant READ_ONLY to VIJAY 

在SQL窗口/提示可以查询该表没有问题。所以现在你需要创建一个视图

Create VIJAY.VIEW_A as SELECT * FROM TABLE_A 

你会得到TABLE_A确实存在的错误。因为视图是编译的,就像一个过程,它没有任何角色运行。由于它运行时没有READ_ONLY角色,因此对于TABLE_A存在这一事实是不知情的。现在我需要做的是现在,你有一个直接的权限

Grant Select on TABLE_A to VIJAY. 

,你可以编译使用该表的视图或程序/包。

好,非常简单的说,你正在试图进入你连接到数据库中不存在插入数据的表。您需要检查这两件事情(即,您连接了哪些东西,并且是那里的表格,并且可以访问您正在使用的用户环境)。

+0

另外,检查您用来连接数据库的用户/架构是否有足够的权限来查看此表/视图。 – Jonathan 2011-02-07 16:10:43

+0

不是“权限不够看”。这可以通过角色完成。正如贾斯汀所说,设置角色无,然后测试是否可以访问表。 – 2011-02-08 15:17:49

正如Joe Stefanelli所说..这里显示的错误有很多可能性。

检查:

  1. 您连接到正确的Oracle实例。
  2. 您有权查询或在查询中引用的表上执行处理。
  3. 普通选择语句和过程是有区别的。 oracle中的过程不尊重分配给用户的角色;而是需要将权限明确授予用户。欲了解更多信息,请阅读下面的链接ORA-00942

在Oracle中,如果存储过程与调用者的权利或定义者执行的,你可以选择:http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/subprograms.htm#i18574

检查存储过程的AUTHID属性正确,并且如果生成的用户具有适当的权限。

该表是否存在于存储过程存在的模式中?如果不是,最简单的解释是您的程序的所有者已被授予通过角色而不是直接授予的访问权限。定义者的权限存储过程需要直接访问它所访问的对象。一个快速的方法来测试,这是为会话禁用角色,即

SQL> set role none; 
SQL> <<execute your query>> 

如果生成错误,问题是缺乏直接批地。