ORA-00942 即使我在架构中创建表



我创建了新用户并授予他(数据库管理(权限。 然后我连接到这个新用户。

当我在此用户中创建一个新表时,请尝试从该表中进行选择,它给了我

oracle-00942:表/视图不存在

当我尝试通过模式浏览器的蟾蜍找到它时,我找不到它。我搜索了它,并在(系统(用户中找到了这个表。

当我使用模式名称创建表时,我在架构浏览器中找到了它,但我也无法从中进行选择。

那么这有什么问题呢?

如果您能显示用于创建表的步骤序列,这将有所帮助。我的猜测是你以某种方式在错误的架构(所有者(下创建表。这样做以找出它在哪里:

select owner, table_name from all_tables where table_name = 'MYTABLE'

如果以SYS方式连接,则可以使用dba_tables而不是all_tables

如果您实际向我们展示您做了什么以及 Oracle 如何响应(即复制/粘贴整个 SQL*Plus 会话(,那就更好了。

由于您可以创建用户,因此您可能可以作为 SYS 进行连接。执行此操作,然后运行以下语句:

SQL> select owner, object_type
2  from dba_objects
3  where object_name = 'EMP';
OWNER                          OBJECT_TYPE
------------------------------ -------------------
SCOTT                          TABLE
SQL>

它将显示该表真正属于谁。


我将模拟你做了什么(实际上,我理解你做了什么(。你会看到 - 如果你做得对 - 一切都很好。

以 SYS 身份连接并创建新用户:

SQL> show user
USER is "SYS"
SQL> create user utest identified by utest
2  default tablespace users
3  temporary tablespace temp
4  quota unlimited on users;
User created.
SQL> grant dba to utest;
Grant succeeded.

以新创建的用户身份连接,创建一个表:

SQL> connect utest/utest
Connected.
SQL> create table test (id number);
Table created.
SQL> select * from test;
no rows selected

正常;表为空,但是 - 没有 ORA-00942 错误。

返回 SYS,检查谁拥有 TEMP 表:

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> select owner, object_type
2  from dba_objects
3  where object_name = 'TEST'
4  order by owner;
OWNER                          OBJECT_TYPE
------------------------------ -------------------
SCOTT                          TABLE
UTEST                          TABLE
SQL>

现在,轮到你了。

我搜索了它,并在(sys(用户中找到了这个表。

听起来您已经使用 SYSDBA 权限连接到数据库,如下所示:

connect your_user/password as sysdba

当我们这样做时,Oracle 会忽略传递的用户名并将我们作为 SYS 连接起来。因此,我们采取的任何操作都作为 SYS 执行。这意味着我们创建的任何表都是在 SYS 模式中创建的,除非我们在它们前面加上特定的模式名称。

最新更新