ORA-02264:现有约束已使用的名称

Khi*_*bal 3 sql oracle oracle10g

我正在研究SQL,我在创建表时遇到了问题!这是我的代码:

CREATE TABLE Voucher_Types
(
    ID Number(3, 0),
    Abbreviation VarChar(2),
    Voucher_Type VarChar(100),
    EntryBy VarChar(25),
    EntryDate Date,
    CONSTRAINT ID_PK Primary Key(ID)
);
Run Code Online (Sandbox Code Playgroud)

我得到以下错误,
ORA-02264:已经被现有约束使用的名称
我正在使用Oracle10g
我Goggled它并找到了一些主题但他们没有帮助我,有人可以在这个问题上帮助我!提前致谢..!

Ren*_*ger 10

您有另一个已经受到名称约束的表ID_PK.

如果你想找出它是哪个表,你可以试试

select owner, table_name from dba_constraints where constraint_name = 'ID_PK';
Run Code Online (Sandbox Code Playgroud)

最有可能的是,您复制了create table语句但未更改主键的约束名称.

通常认为将表名包含在约束的名称中是一种好习惯.一个原因正是要防止这种"错误".

所以,在你的情况下,你可能会使用

CREATE TABLE Voucher_Types
(
   ... 
   CONSTRAINT Voucher_Types_PK Primary Key(ID)
);
Run Code Online (Sandbox Code Playgroud)

更新为什么不能使用相同的约束名称两次?(根据评论中的问题):这正是因为它是一个标识约束的名称.如果您在正在运行的系统中违反约束,则需要知道它是哪个约束,因此您需要一个名称.但是,如果此名称可以引用多个约束,则该名称没有特别用途.