因为这篇文章是在stackoverflow上搜索“ORA-00942:table or view does not exist insert”时发现的最上面的一篇文章,我想提一下这个错误的另一个可能原因(至少在Oracle 12 c中):一个表使用一个序列来设置默认值,而执行插入查询的用户对该序列没有选择权限。是时候弄清楚了 要重现此问题,请以user1形式执行以下SQL:
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语句:
insert into user1.customer (name,surname) values ('michael','jackson');
型 结果将是“ORA-00942:table or view does not exist”,即使user2对user1.customer表具有insert和select权限,并且正确地将schema所有者名称作为表的前缀。要避免此问题,您必须对序列授予select权限:
7条答案
按热度按时间5cg8jx4n1#
因为这篇文章是在stackoverflow上搜索“ORA-00942:table or view does not exist insert”时发现的最上面的一篇文章,我想提一下这个错误的另一个可能原因(至少在Oracle 12 c中):一个表使用一个序列来设置默认值,而执行插入查询的用户对该序列没有选择权限。是时候弄清楚了
要重现此问题,请以
user1
形式执行以下SQL:字符串
然后,以
user2
的形式执行以下insert语句:型
结果将是“ORA-00942:table or view does not exist”,即使
user2
对user1.customer
表具有insert和select权限,并且正确地将schema所有者名称作为表的前缀。要避免此问题,您必须对序列授予select权限:型
nzrxty8p2#
用户没有查看表所需的权限,表不存在,或者您正在错误的模式中运行查询
table存在吗?
字符串
你授予了什么特权?
型
您是否正在对第一个查询中的所有者运行查询?
lpwwtiir3#
区分大小写的表(用双引号创建的表名)也会抛出同样的错误。有关详细信息,请参阅此答案。
简单地用双引号将表括起来:
字符串
a1o7rhls4#
您不能直接访问名称为
customer
的table
。它应该是user1.customer
或为指向user1.customer
的user2创建一个同义词customer
。希望这对您有帮助。olqngx595#
答案:http://www.dba-oracle.com/concepts/synonyms.htm
Oracle同义词基本上允许您创建指向其他位置存在的对象的指针。您需要Oracle同义词,因为当您登录到Oracle时,它会在您的方案(帐户)中查找您正在查询的所有对象。如果它们不存在,它将给予错误,告诉您它们不存在。
y1aodyip6#
我正在使用Oracle数据库,我遇到了同样的问题。最终我发现ORACLE DB正在转换所有的元数据(表/sp/视图/触发器)大写。
我正在尝试如何在SQL中编写表名(myTempTable),而它期望如何在数据库中存储表名(MYTEMPTABLE)。同样适用于列名。
这是一个很常见的问题,开发人员谁使用SQL,现在跳到ORACLE DB。
sauutmhj7#
在我的例子中,当我使用asp.net核心应用程序时,我在我的
sql query
中有一个错误。如果你的database
包含许多schemas
,你必须在table_name
之前写schema_name
,比如:Select * from SCHEMA_NAME.TABLE_NAME...
我希望它会有帮助。