错误:ORA-00955:名称已由Oracle中的现有对象使用

eh57zj3b  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(567)

我正在从现有视图创建表,但收到错误-“ORA-00955:名称已被现有对象“.
当我在sql developer中运行下面的命令时,它正在使用数据创建表,但在unix环境中执行相同的命令时,它失败了,即创建的表没有数据。

CREATE TABLE table1 AS SELECT * FROM myView;
             *
ERROR at line 1:
ORA-00955: name is already used by an existing object

我使用下面的查询来检查object_name(table 1)是否正在使用中,但它没有返回任何内容。

SELECT * FROM all_objects WHERE object_name = upper('table1') and OWNER = upper('your_schema')
erhoui1w

erhoui1w1#

可能发生冲突的名称空间位于本地架构中。
在您的模式中可以有一个名为TABLE 1的表,在数据库中的100个其他模式中可以有100个其他时间。

create table table1 (a integer);
 create table table1 (a varchar2(20));
 create table jefe.table1 (a integer);

运行此命令将:
1.在本地模式中创建表1

  1. ORA-00955:名称已被现有对象使用
    1.在我的JEFE模式中创建一个同名表
    你要检查的是-
-- first create a table
create table table1 as
   select *
     from user_objects
    where object_type = 'TABLE';

现在在我们创建另一个之前,让我们看看它是否已经存在

select *
  from User_tables
 where table_name = 'TABLE1';

对象在Oracle中是大小写敏感的,创建一个TABLE就像我们上面做的那样,不加引号,把它作为大写的TABLE 1放入字典中。
所以当你去找它的时候,你需要把它引起来,然后在大写的名字上搜索。
不需要在查询 predicate 上使用UPPER()函数。这可能会导致错误的执行计划,只需搜索正确的字符串即可。
如果你搜索table_name = 'table 1' -你会得到零行。

仅供参考,作为最佳实践,不要在Oracle中创建名称区分大小写或保留字的对象。你会让你的生活和你的开发人员的生活变得非常非常混乱。几乎所有Oracle数据库开发人员都假定所有对象名称都不区分大小写。

相关问题