SQL 错误 : ORA-00942 table or view does not exist

标签 sql oracle oracle11g

我使用 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/

相关文章:

mysql - 奇怪的 : MySQL Left Join, "unknown column";同样的 leftjoin 在多表查询中不起作用

sql - 如何更改 Oracle View 中的列数据类型?

c# - odp.net 可以将参数传递给 bool pl/sql 参数吗?

sql - 如何根据时间戳连接两个表(有几秒的差异)?

mysql - 如何分组两次或限制分组依据?

c# - 哪些 .Net 程序集作为标准集成到 SQL Server 2008 R2 CLR 中?

PHPExcelReader 无法写入数据库

spring - JPA @Column 不适用于带有特殊字符的列名

oracle - 编译无效的 oracle 程序

java - MyBatis 插入所有带有生成 ID 的内容