我正在从现有视图创建表,但收到错误-“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')
1条答案
按热度按时间erhoui1w1#
可能发生冲突的名称空间位于本地架构中。
在您的模式中可以有一个名为TABLE 1的表,在数据库中的100个其他模式中可以有100个其他时间。
运行此命令将:
1.在本地模式中创建表1
1.在我的JEFE模式中创建一个同名表
你要检查的是-
现在在我们创建另一个之前,让我们看看它是否已经存在
对象在Oracle中是大小写敏感的,创建一个TABLE就像我们上面做的那样,不加引号,把它作为大写的TABLE 1放入字典中。
所以当你去找它的时候,你需要把它引起来,然后在大写的名字上搜索。
不需要在查询 predicate 上使用UPPER()函数。这可能会导致错误的执行计划,只需搜索正确的字符串即可。
如果你搜索table_name = 'table 1' -你会得到零行。
仅供参考,作为最佳实践,不要在Oracle中创建名称区分大小写或保留字的对象。你会让你的生活和你的开发人员的生活变得非常非常混乱。几乎所有Oracle数据库开发人员都假定所有对象名称都不区分大小写。