我使用 SQL developer 并与系统用户建立了到我的数据库的连接,之后我创建了一个用户并与该用户建立了另一个连接并具有所有需要的权限。
但是当我尝试继续以下时,我收到 SQL 错误
ORA-00942 table or view does not exist.:
INSERT INTO customer (c_id,name,surname) VALUES ('1','Micheal','Jackson')
最佳答案
因为这篇文章是搜索“ORA-00942:表或 View 不存在插入”时在stackoverflow上找到的最上面的一篇,所以我想提一下这个错误的另一个可能原因(至少在Oracle 12c中):表使用序列设置默认值,并且执行插入查询的用户对序列没有选择权限。这是我的问题,我花了很长时间才弄明白。
要重现该问题,请执行以下 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;
然后,将这条插入语句执行为
user2
:insert into user1.customer (name,surname) values ('michael','jackson');
结果将是“ORA-00942:表或 View 不存在”,即使
user2
确实对 user1.customer
具有插入和选择权限表并正确地使用架构所有者名称为表添加前缀。为避免此问题,您必须授予对序列的选择权限:grant select on seq_customer_id to user2;
关于SQL 错误 : ORA-00942 table or view does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16129912/