【问题标题】:Oracle : table or view doesn't exist?Oracle:表或视图不存在?
【发布时间】:2014-07-04 16:17:51
【问题描述】:

我在 oracle 中有一个架构,其中有一些表,比如说 Table1(我确定它存在)

当我使用 same schema 查询表时:

select * from Table1; 

我遇到错误“表或视图未退出”

我怀疑与表空间有关...因为当我创建用户时

CREATE USER MyUser IDENTIFIED BY password DEFAULT TABLESPACE MyTableSpace;

我设置了不同的默认表空间。

我试过了

select * from MyTableSpace.Table1; 
select * from MyUser.Table1;  

但这并不成功。

请问有人有意见吗?

谢谢。

【问题讨论】:

  • 首先,表的前面限定符是模式名称,而不是表空间,所以“MyTableSpace.Table1”肯定是不正确的。您是否检查过桌面上是否有某种公共同义词。如果您“从 MyUser.Table1 中选择 *”会怎样?
  • "select * from MyUser.Table1" 返回同样的错误
  • 您以 MyUser 身份登录?
  • 是的,我在 SQL Developer 中以 MyUser 身份登录,我可以看到该表。
  • 您是否以 MyUser 身份登录然后创建表?还是您将其创建为 SYS?您是否使用混合大小写作为表名?如果您以 SYS 身份登录,请尝试 SELECT * FROM DBA_TABLES WHERE UPPER(TABLE_NAME)='TABLE1';

标签: oracle


【解决方案1】:

如果我对您的理解正确 - 您有两个用户(方案)-User1,User2。 您以 User1 身份登录 SQL Developer,然后创建了 Table1。 然后你以 User2 身份登录 SQL Developer 并尝试执行 select * from Table1select * from User1.Table1 不成功。

因此,首先您必须将 User1.Table1 上的选择访问权限授予 User2。 为此,您必须以 User1 身份登录并执行

GRANT SELECT, INSERT ON Table1 TO User2;

这样就可以执行查询了(当你以User2登录时)

select * from User1.Table1;

那么您必须创建同义词才能不使用前缀 User1。为此 - 以 User2 身份登录并执行

CREATE SYNONYM Table1 FOR User1.Table1;

现在您可以以 User2 身份登录并执行:

select * from User1.Table1;

【讨论】:

  • 我只有一个用户。如第一篇文章中所述:“当我使用 SAME 模式查询表时”。我在任何地方都没有提到 User2...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2018-09-29
  • 2021-09-13
  • 2012-04-16
相关资源
最近更新 更多