2014-09-28 91 views
0

我收到此錯誤如何添加檢查約束日期列

ORA-02438:當我執行此查詢

alter table Issue 
modify Issue_Date not null check (Issue_Date <= sys_date); 
列檢查約束不能引用其他列

以及我也要添加這個條件也(issue_date<return_date);

,當我試圖這樣

alter table Issue 
add constraint ck_Issue_Date not null check (Issue_Date <= sys_date); 

錯誤ORA-00904:無效的標識符

+1

在SYSDATE – JohnLBevan 2014-09-28 20:31:50

+0

刪除下劃線隨着虛擬列(11版或更高版本),你可以使用檢查約束SYSDATE的幫助:http://rwijk.blogspot.nl /2007/12/check-constraints-with-sysdate.html – 2014-09-29 11:21:32

+0

如果刪除下劃線,則會出現此錯誤: ORA-02436:在CHECK約束中錯誤地指定了日期或系統變量 – 2014-10-01 19:21:23

回答

1

我懷疑你是想引用甲骨文SYSDATE功能,而不是一個名爲sys_date列。

不幸的是,CHECK CONSTRAINT中的條件無法引用SYSDATE函數。

要讓數據庫強制實施這種類型的列值限制,那需要TRIGGER

例如,這樣的事情:

CREATE OR REPLACE TRIGGER trg_issue_issue_date_biu 
BEFORE INSERT OR UPDATE ON Issue 
FOR EACH ROW 
BEGIN 
    IF (NEW.Issue_Date <= SYSDATE) THEN 
     NULL; 
    ELSE 
     RAISE_APPLICATION_ERROR(-20000, 'Invalid: Issue_Date is NULL or >SYSDATE'); 
    END IF; 
END; 
0

您試圖混淆內嵌列級約束和表級約束(超過1列)。請只需2所陳述割裂開來:

alter table Issue 
    modify Issue_Date not null; 

alter table Issue 
    add constraint ck_Issue_Date check (Issue_Date <= sys_date); 

alter table Issue 
    add constraint ck_Issue_Date2 check (issue_date<return_date);