重命名表,然后在oracle中创建一个具有相同名称的表

时间:2018-04-12 11:28:00

标签: sql database oracle

我在Oracle中有一个名为“User”的表 我使用下面的命令将其重命名为“帐户”。这很成功。

RENAME User TO Account

然后我想创建一个名为'User'的新表,其中包含不同的列。我尝试了以下命令,

CREATE TABLE User(
    user_id    NUMBER(38, 0)    NOT NULL,
    user_name  VARCHAR2(25)     NOT NULL,
    CONSTRAINT PK_User PRIMARY KEY (user_id)
)
;

但甲骨文不允许我这样做。我收到以下错误,

Error starting at line : 1 in command -
CREATE TABLE User(
    user_id    NUMBER(38, 0)    NOT NULL,
    user_name  VARCHAR2(25)     NOT NULL,
    CONSTRAINT PK_User PRIMARY KEY (user_id)
)
Error report -
SQL Error: ORA-00955: name is already used by an existing object
00955. 00000 -  "name is already used by an existing object"
*Cause:    
*Action:

可能是什么问题?在重命名表以清除某些缓存等之后,是否需要运行任何其他命令。

修改

重命名表

后成功重命名了约束
ALTER TABLE Account RENAME CONSTRAINT PK_User TO PK_Account

注意:表名“帐户”和“用户”仅用于示例目的。我理解“用户”是保留的关键字。

4 个答案:

答案 0 :(得分:4)

这是因为您的主键名已被占用。你应该重命名它:

ALTER INDEX "PK_User" RENAME TO "PK_Account_User";

您可以使用以下命令检查已经使用的名称:

SELECT * FROM USER_INDEXES WHERE TABLE_NAME='<table_name>';

答案 1 :(得分:0)

用户是保留字。

KLRICE@xe >CREATE TABLE User(
  2      user_id    NUMBER(38, 0)    NOT NULL,
  3      user_name  VARCHAR2(25)     NOT NULL,
  4      CONSTRAINT PK_User PRIMARY KEY (user_id)
  5  );

Error starting at line : 1 in command -
CREATE TABLE User(
    user_id    NUMBER(38, 0)    NOT NULL,
    user_name  VARCHAR2(25)     NOT NULL,
    CONSTRAINT PK_User PRIMARY KEY (user_id)
)
Error report -
ORA-00903: invalid table name

使用前缀或其他字

1  CREATE TABLE my_user (
  2      user_id    NUMBER(38, 0)    NOT NULL,
  3      user_name  VARCHAR2(25)     NOT NULL,
  4      CONSTRAINT PK_User PRIMARY KEY (user_id)
  5* );
KLRICE@xe >/

Table MY_USER created.

KLRICE@xe >

答案 2 :(得分:0)

您应该重命名主键。

CREATE TABLE User(
    user_id    NUMBER(38, 0)    NOT NULL,
    user_name  VARCHAR2(25)     NOT NULL,
    CONSTRAINT PK_User_id PRIMARY KEY (user_id)
);

答案 3 :(得分:0)

如果Oracle告诉您:&#34;现有对象已经使用了名称&#34;然后找出具有该名称的对象。

select owner,object_type
from all_objects where 
object_name='<NAME_OF_OBJECT>'