2014-04-01 45 views
2

使用SQL/PL開發人員,我有一個名爲Appeal的表,它具有2個attributs OpenDate和CloseDate。我想添加一個約束,以確保開放日期將小於結束日期。我在這張桌子上有很多記錄。SQL oracle將檢查約束添加到現有表中

這是我的代碼:

alter table appeal 
add constraint Check_Dates 
check (OpenDate < CloseDate) 

,我得到的連接錯誤說: ORA-02293:無法驗證(STSTEM.CHECK_DATES) - 檢查約束違反

任何ieads? 感謝名單

回答

3

你的約束看起來正確,我測試:

create table appeal (OpenDate date, CloseDate date); 

alter table appeal 
add constraint Check_Dates 
check (OpenDate < CloseDate); 

insert into appeal values (sysdate, sysdate - 1); 

而這裏的結果:

架構創建失敗:ORA-02290:檢查約束 (USER_4_44096.CHECK_DATES)違反

問題是你已經在使用OpenDat e <數據庫中的CloseDate值。在創建約束之前修復它。看行爲改變句子順序:

create table appeal (OpenDate date, CloseDate date); 

insert into appeal values (sysdate, sysdate - 1); 

alter table appeal 
add constraint Check_Dates 
check (OpenDate < CloseDate); 

在這裏,您的問題:

架構創建失敗:ORA-02293:無法驗證 (USER_4_E4450.CHECK_DATES) - 檢查約束違反

+0

我看到下...但我已經在我插入已添加約束前表中的數據,因此可能是是問題嗎? – Shmuli

+0

是的,這是問題所在。現在解釋答案。 – danihp

+0

非常感謝你 – Shmuli

0

試試這個 更改表格上訴 添加約束Check_Dates check(OpenDate < CloseDate)EN ABLE NOVALIDATE;

您必須檢查之前的數據錯誤,但任何新數據將屬於CHECK