Sql ORA-02264:现有约束已使用的名称
我正在处理SQL,在创建表时遇到了一个问题! 这是我的密码:Sql ORA-02264:现有约束已使用的名称,sql,oracle,oracle10g,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:现有约束
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
我目不转睛地看了看,发现了一些话题,但它们对我没有帮助,有人能帮我解决这个问题吗!提前谢谢 您有另一个表,该表已被名称
ID\u 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)
);
更新为什么同一约束名称不能使用两次?(根据您在评论中的问题):这正是因为它是标识约束的名称。如果您在运行的系统中违反了某个约束,您需要知道它是哪个约束,因此需要一个名称。但是,如果此名称可以引用多个约束,则该名称没有特殊用途。错误消息告诉您,您的架构中已经有另一个名为ID\u 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'
这意味着有一个名为ID_PK try with的约束
约束凭证\u类型\u ID\u主键(ID)
例如
您可以使用检查是否存在
select * from user_constraints where upper(constraint_name) = 'ID_PK';
或
弗兰克·施密特的安瑟很好。 但是,对于约束的名称,也可以使用表别名作为约束名称的一部分。 约束的名称类似于:vte_pk。并且没有必要在约束名称中调用相关列的名称。 如果主键超过2(或更多)列怎么办
因此,
。。。约束VTE_PK主键(ID).
您在其他表中有相同的约束名称
您需要更改约束名称
如果要查看使用此约束的表名
您可以看到以下查询:
从user_constraints中选择表_name、constraint_name,其中lower(constraint_name)='id_pk' 谢谢大家的回答!我理解这个问题,但我有一个问题:为什么没有两个表具有相同的约束名称,即使它们彼此没有关系。。!!好的,谢谢!现在我明白了。。!!谢谢你的回复。。!!
select * from all_constraints where upper(constraint_name) = 'ID_PK';