SQL错误:ORA-00942表或视图不存在

时间:2013-04-21 09:52:26

标签: sql oracle11g

我使用SQL开发人员,在创建用户并与该用户建立了具有所有必需权限的另一个连接后,我与系统用户建立了数据库连接。

但是当我尝试继续下面时,我得到了SQL错误

  

ORA-00942表或视图不存在。:


INSERT INTO customer (c_id,name,surname) VALUES ('1','Micheal','Jackson')

6 个答案:

答案 0 :(得分:25)

因为在搜索“ORA-00942:表或视图不存在插入”时,此帖子是stackoverflow上发现的最高帖子,我想提及此错误的另一个可能原因(至少在Oracle 12c中):表格使用序列设置默认值,执行插入查询的用户对序列没有select权限。这是我的问题,我花了不必要的时间来弄明白。

要重现此问题,请执行以下SQL user1

create sequence seq_customer_id;

create table customer (
c_id number(10) default seq_customer_id.nextval primary key,
name varchar(100) not null,
surname varchar(100) not null
);

grant select, insert, update, delete on customer to user2;

然后,将此insert语句作为user2执行:

insert into user1.customer (name,surname) values ('michael','jackson');

结果将是“ORA-00942:表或视图不存在”,即使user2user1.customer表上具有插入和选择权限,并且正确地为表添加了架构所有者名称前缀。要避免此问题,您必须为序列授予select权限:

grant select on seq_customer_id to user2;

答案 1 :(得分:11)

用户没有查看表所需的权限,表不存在或者您在错误的架构中运行查询

表格存在吗?

select owner, 
       object_name 
from dba_objects 
where object_name = any ('CUSTOMER','customer');

你授予了哪些特权?

grant select, insert on customer to user;

您是从第一个查询中针对所有者运行查询吗?

答案 2 :(得分:6)

您无法直接访问名为“customer”的表格。它应该是'user1.customer'或为user2指向'user1.customer'创建同义词'customer'。希望这会有所帮助..

答案 3 :(得分:1)

以下是答案:http://www.dba-oracle.com/concepts/synonyms.htm

Oracle同义词基本上允许您创建指向其他位置的对象的指针。您需要Oracle同义词,因为当您登录Oracle时,它会查找您在架构(帐户)中查询的所有对象。如果它们不在那里,它会给你一个错误,告诉你它们不存在。

答案 4 :(得分:0)

区分大小写的表(使用双引号创建的表名)也可能引发此相同错误。 See this answer以获得更多信息。

只需将表格用双引号引起来:

INSERT INTO "customer" (c_id,name,surname) VALUES ('1','Micheal','Jackson')

答案 5 :(得分:0)

我正在使用Oracle数据库,但遇到了同样的问题。最终我发现ORACLE DB正在转换所有大写的元数据(表/ sp /视图/触发器)。

并且我正在尝试如何在sql中编写表名(myTempTable),但是它期望如何在databsae(MYTEMPTABLE)中存储表名。同样适用于列名。

无论是使用sql还是现在跳入ORACLE DB的开发人员,这都是一个非常普遍的问题。