我使用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:表或视图不存在",即使user2在user1.customer表上具有插入和选择权限并且正确地为表添加模式所有者名称前缀.要避免此问题,您必须为序列授予select权限:
grant select on seq_customer_id to user2;
Run Code Online (Sandbox Code Playgroud)
小智 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)
你是从第一个查询运行查询所有者的查询?
区分大小写的表(用双引号创建的表名)也会抛出同样的错误。有关更多信息,请参阅此答案。
只需将表格用双引号括起来:
INSERT INTO "customer" (c_id,name,surname) VALUES ('1','Micheal','Jackson')
Run Code Online (Sandbox Code Playgroud)