2015-05-09 53 views
3

我想添加约束到我的表名Account,属性名称Type。 在Type,我要添加帐户例如类型:Saving, Credit Card, Home Loan, Personal Loan, Fixed Deposit, Current, iSaver.为alter table添加约束出错

这里就是我的代码:

ALTER TABLE ACCOUNT 
ADD CONSTRAINT AccountCK_Type 
CHECK (TYPE IN('Saving','Credit Card','Home Loan','Personal Loan','Fixed Deposit','Current','iSaver')); 

的错误显示:

>Error report - 
> 
>SQL Error: ORA-02293: cannot validate (SHT461.ACCOUNTCK_TYPE) - check constraint violated 
>02293. 00000 - "cannot validate (%s.%s) - check constraint violated" 
> 
>*Cause: an alter table operation tried to validate a check constraint to 
>   populated table that had nocomplying values. 
> 
>*Action: Obvious 

请提出一个我如何添加约束。谢谢。

+3

从其中TYPE不是IN('Saving','Credit Card','Home Loan','Personal Loan','Fixed Deposit','Current','iSaver')的ACCOUNT中选择*。有没有结果? – Reisclef

+0

I.e.表中是否存在违反您尝试创建的约束的行? – jarlh

+0

如果有的话,你是否希望新的约束忽略这些约束,只适用于未来的插入/更新? –

回答

3

如果你只是想约束申请未来的数据变化,如你所说的评论,然后你可以把它忽略其他现有的值与NOVALIDATE clause:否则

ALTER TABLE ACCOUNT 
ADD CONSTRAINT AccountCK_Type 
CHECK (TYPE IN('Saving','Credit Card','Home Loan','Personal Loan', 
    'Fixed Deposit','Current','iSaver')) 
ENABLE NOVALIDATE; 

,你将不得不在创建约束之前,清理现有数据 - 删除或更正该列中任何其他值的行。

+0

非常感谢。有用! :-) – JSTai