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

时间:2014-02-28 07:45:18

标签: 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)
);

我得到以下错误,
ORA-02264:现有约束已使用的名称
我正在使用Oracle10g
我瞥了一眼并发现了一些话题,但是他们没有帮助我,有人可以在这个问题上帮助我!在此先感谢..!

5 个答案:

答案 0 :(得分:6)

您有另一个已经使用名称ID_PK约束的表。

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

select owner, table_name from dba_constraints where constraint_name = 'ID_PK';

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

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

因此,在您的情况下,您可以使用

CREATE TABLE Voucher_Types
(
   ... 
   CONSTRAINT Voucher_Types_PK Primary Key(ID)
);

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

答案 1 :(得分:3)

错误消息告诉您模式中已经存在另一个名为ID_PK的约束 - 只需使用其他名称,您应该没问题:

CREATE TABLE Voucher_Types
(
    ID Number(3, 0),
    Abbreviation VarChar(2),
    Voucher_Type VarChar(100),
    EntryBy VarChar(25),
    EntryDate Date,
    CONSTRAINT VOUCHER_TYPES_ID_PK Primary Key(ID)
);

要查找有问题的约束:

SELECT * FROM user_constraints WHERE CONSTRAINT_NAME = 'ID_PK'

答案 2 :(得分:1)

您在其他表中具有相同的约束名称 您需要更改约束名称

如果要查看使用此约束的表名 你可以看到以下查询:

从user_constraints中选择table_name,constraint_name,其中lower(constraint_name)='id_pk';

答案 3 :(得分:0)

这意味着有一个名为ID_PK的约束尝试 例如CONSTRAINT Voucher_Types_ID_PK Primary Key(ID)

你可以检查是否存在

select * from user_constraints where upper(constraint_name) = 'ID_PK';

select * from all_constraints where upper(constraint_name) = 'ID_PK';

答案 4 :(得分:0)

弗兰克施密特的说法很好。 但是,对于约束的名称,您还可以使用表别名作为约束名称的一部分。 约束的名称类似于:vte_pk。并且没有必要在约束名称中调用相关列的名称。 如果主键超过2(或更多)列会怎样?

因此... CONSTRAINT VTE_PK Primary Key(ID) ...