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

use*_*042 20 sql oracle11g

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

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

ORA-00942表或视图不存在:


INSERT INTO customer (c_id,name,surname) VALUES ('1','Micheal','Jackson')
Run Code Online (Sandbox Code Playgroud)

jak*_*man 30

因为这个职位是最上面的一个搜索时,在计算器发现"ORA-00942:表或视图不存在插入",我想提一提这个错误(至少在甲骨文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;
Run Code Online (Sandbox Code Playgroud)

然后,执行以下insert语句user2:

insert into user1.customer (name,surname) values ('michael','jackson');
Run Code Online (Sandbox Code Playgroud)

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

grant select on seq_customer_id to user2;
Run Code Online (Sandbox Code Playgroud)

  • 刚刚经历了同样的情景.当实际问题是序列许可问题时,你得到00942非常恼火. (4认同)
  • 非常感谢提及@jakestayman。我刚刚经历了这个,浪费了一天调试这个.. (3认同)
  • 非常感谢!完全拯救了我的一天!查了很久的数据库变更日志,没想到是权限问题。 (3认同)
  • 但我没有看到该表的任何序列。啊对。:) (2认同)
  • 你救了我的命,这就像一个魅力!Oracle 没有明确指出此错误。 (2认同)

小智 12

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

表存在吗?

select owner, 
       object_name 
from dba_objects 
where object_name = any ('CUSTOMER','customer');
Run Code Online (Sandbox Code Playgroud)

你授予了什么特权?

grant select, insert on customer to user;
Run Code Online (Sandbox Code Playgroud)

你是从第一个查询运行查询所有者的查询?

  • 普通用户无法访问`dba_objects`.你应该使用`all_objects`代替. (4认同)

cha*_*eda 9

区分大小写的表(用双引号创建的表名)也会抛出同样的错误。有关更多信息,请参阅此答案

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

INSERT INTO "customer" (c_id,name,surname) VALUES ('1','Micheal','Jackson')
Run Code Online (Sandbox Code Playgroud)


小智 8

您无法直接访问名为"customer"的表.它应该是'user1.customer'或为user2指向'user1.customer'创建同义词'customer'.希望这可以帮助..