SQL错误:ORA-00942表或视图不存在
我使用sqldeveloper,在创建了一个用户并以所需的所有权限与该用户建立了另一个连接之后,我与系统用户建立了数据库连接 但是当我尝试继续下面的操作时,我得到了SQL错误 ORA-00942表或视图不存在:SQL错误:ORA-00942表或视图不存在,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我使用sqldeveloper,在创建了一个用户并以所需的所有权限与该用户建立了另一个连接之后,我与系统用户建立了数据库连接 但是当我尝试继续下面的操作时,我得到了SQL错误 ORA-00942表或视图不存在: 要么用户没有查看该表所需的权限,要么该表不存在,要么您在错误的架构中运行查询 这张桌子存在吗 选择所有者, 对象名称 来自dba_对象 其中object_name=any('CUSTOMER','CUSTOMER'); 你授予了什么特权 grant select,在客户对用户上插入;
要么用户没有查看该表所需的权限,要么该表不存在,要么您在错误的架构中运行查询 这张桌子存在吗
选择所有者,
对象名称
来自dba_对象
其中object_name=any('CUSTOMER','CUSTOMER');
你授予了什么特权
grant select,在客户对用户上插入;
您是否从第一个查询中针对所有者运行查询?用户没有查看表所需的权限,表不存在,或者您在错误的架构中运行查询 这张桌子存在吗
选择所有者,
对象名称
来自dba_对象
其中object_name=any('CUSTOMER','CUSTOMER');
你授予了什么特权
grant select,在客户对用户上插入;
是否从第一个查询开始对所有者运行查询?您不能直接访问名为“customer”的表。它应该是“user1.customer”,或者为user2创建一个指向“user1.customer”的同义词“customer”。希望这有帮助。您不能直接访问名为“customer”的表。它应该是“user1.customer”,或者为user2创建一个指向“user1.customer”的同义词“customer”。希望这有帮助。以下是一个答案: Oracle同义词基本上允许您创建指向存在于其他地方的对象的指针。您需要Oracle同义词,因为当您登录到Oracle时,它会在您的模式(帐户)中查找您正在查询的所有对象。如果它们不存在,它将给您一个错误,告诉您它们不存在。以下是一个答案:
Oracle同义词基本上允许您创建指向存在于其他地方的对象的指针。您需要Oracle同义词,因为当您登录到Oracle时,它会在您的模式(帐户)中查找您正在查询的所有对象。如果它们不存在,它会给您一个错误,告诉您它们不存在。因为在搜索“ORA-00942:表或视图不存在插入”时,这篇文章是在stackoverflow上找到的最上面的文章,所以我想提及此错误的另一个可能原因(至少在Oracle 12c中):表使用序列设置默认值,执行insert查询的用户对序列没有select权限。这是我的问题,我花了不必要的时间才弄明白 要重现此问题,请以
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:表或视图不存在”,即使user2
对user1.customer
表具有插入和选择权限,并且正确地在表前面加上架构所有者名称。要避免此问题,必须授予序列的select权限:
grant select on seq_customer_id to user2;
因为这篇文章是搜索“ORA-00942:表或视图不存在插入”时在stackoverflow上找到的最上面的文章,所以我想提及此错误的另一个可能原因(至少在Oracle 12c中):表使用序列来设置默认值,而执行插入查询的用户对序列没有选择权限。这是我的问题,我花了不必要的时间才弄明白 要重现此问题,请以
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:表或视图不存在”,即使user2
对user1.customer
表具有插入和选择权限,并且正确地在表前面加上架构所有者名称。要避免此问题,必须授予序列的select权限:
grant select on seq_customer_id to user2;
区分大小写的表(使用双引号创建的表名)也会抛出相同的错误。了解更多信息
只需将表用双引号括起来:
INSERT INTO "customer" (c_id,name,surname) VALUES ('1','Micheal','Jackson')
区分大小写的表(使用双引号创建的表名)也会抛出相同的错误。了解更多信息
只需将表用双引号括起来:
INSERT INTO "customer" (c_id,name,surname) VALUES ('1','Micheal','Jackson')
我正在使用Oracle数据库,我也遇到了同样的问题。最终,我发现ORACLE DB正在转换所有大写的元数据(table/sp/view/trigger) 我正在尝试如何用sql编写表名(MyTestable),而它希望用databsae(MyTestable)存储表名。同样适用于列名
这是开发人员经常遇到的问题,他们使用sql,现在跳进了ORACLE DB 我正在使用Oracle数据库,我遇到了同样的问题。最终,我发现ORACLE DB正在转换所有大写的元数据(table/sp/view/trigger) 我正在尝试如何用sql编写表名(MyTestable),而它希望用databsae(MyTestable)存储表名。同样适用于列名
这是开发人员经常遇到的问题,他们使用sql,现在跳进了ORACLE DB
dba_对象
对于普通用户是不可访问的。您应该改用所有对象
。非常感谢您的关注,我执行了第一次查询以查看“customer”表的所有者,结果是“选择了0行”。这意味着我创建的用户没有所需的特权,我想?dba_对象
对于普通用户来说是不可访问的。您应该改用所有对象
。非常感谢您的关注,我执行了第一次查询以查看“customer”表的所有者,结果是“选择了0行”。这意味着我创建的用户