ORA-00942:与其他用户连接的表或视图不存在

mzu*_*ita 1 oracle plsql oracle-sqldeveloper

在Oracle SQL开发人员中ORA-00942: Table or View not exist,执行以下操作时,我与其他用户连接时出错:

CREATE USER marta IDENTIFIED BY 'marta';
GRANT SELECT, INSERT ON myTable TO marta;
Run Code Online (Sandbox Code Playgroud)

因此,执行:

CONNECT marta/marta;
INSERT INTO myTable VALUES ('1', 'foo', bar');
Run Code Online (Sandbox Code Playgroud)

得到了ORA-00942 ...

显然,如果我使用系统用户,则可以毫无问题地插入行。

我搜索了其他答案,但我无法解决此问题。

APC*_*APC 5

显然,如果我使用系统用户,则可以毫无问题地插入行。

哦哦 没有什么明显的。SYSTEM用户不应拥有一个名为MY_TABLE的表(或任何实际命名的应用程序表)。SYSTEM用户是Oracle数据库的一部分,其架构由Oracle控制,将其用于我们自己的应用程序对象确实是一种不好的做法。

但是似乎您已经在该架构中创建了一个表,而用户MARTA看不到它。这是标准。默认情况下,用户只能看到自己的对象。如果对象的所有者(或超级用户)向其他用户授予该对象的特权,则他们只能看到其他模式中的对象。

因此,作为SYSTEM

grant select on my_table to marta;
Run Code Online (Sandbox Code Playgroud)

然后,作为MARTA

select * from system.my_table;
Run Code Online (Sandbox Code Playgroud)

为了避免为拥有的架构添加前缀,MARTA可以创建一个同义词:

create or replace synonym my_table for system.my_table;

select * from my_table;
Run Code Online (Sandbox Code Playgroud)

但是实际上,您需要停止对自己的表使用SYSTEM。

  • 但是实际上,您需要停止对自己的表使用SYSTEM-> THIS (4认同)