ora-00942甚至我在架构中创建表

时间:2018-10-21 18:48:35

标签: oracle schema ora-00942

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

当我在该用户中创建新表时,尝试从该表中进行选择

  

oracle-00942:表/视图不存在

当我尝试通过模式浏览器中的toad查找蟾蜍时,找不到它。我搜索了它,并在(sys)用户中找到了该表。

当我创建具有架构名称的表时,我在架构浏览器中找到了它,但是我也无法从中选择。

那这是怎么回事?

3 个答案:

答案 0 :(得分:0)

如果显示用于创建表的步骤顺序,将很有帮助。我的猜测是以某种方式在错误的架构(所有者)下创建表。执行此操作以找出其位置:

create

如果以select owner, table_name from all_tables where table_name = 'MYTABLE' 连接,则可以使用SYS代替dba_tables

答案 1 :(得分:0)

最好是向我们展示您的工作以及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>

现在轮到你了。

答案 2 :(得分:0)

  

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

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

connect your_user/password as sysdba

执行此操作时,Oracle将忽略传递的用户名,并将我们连接为SYS。因此,我们执行的所有操作都将作为SYS执行。这意味着我们创建的任何表都是在SYS模式中创建的,除非我们为它们添加特定的模式名称作为前缀。