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