2013-04-07 94 views
0

需要一些幫助,這:CHECK約束來限制登記日期日期8月26日之後,2005年

創建一個名爲TEMP_STUDENT有以下的列和 約束表:爲學生ID列STUD_ID和是主 鍵,列FIRST_NAME學生的名字,學生的姓氏,一列ZIP這是一個外鍵在學生數據庫模式的ZIPCODE表中的ZIP 列列LAST_NAME 和 列REGISTRATION_DATE非空並且具有CHECK約束 來限制註冊dat e將於2005年8月26日之後發佈。所有 限制必須被命名。 first_name和last_name列需要 。

我得到這個:

CREATE TABLE Temp_Student 
(STUD_ID NUMBER (8,0), 
FIRST_NAME VARCHAR2(25) NOT NULL, 
LAST_NAME VARCHAR2(25) NOT NULL, 
ZIP VARCHAR2(5), 
REGISTRATION_DATE DATE NOT NULL, 
CONSTRAINT STUD_ID_PK PRIMARY KEY(STUD_ID), 
CONSTRAINT ZIP_FK FOREIGN KEY (ZIP) 
REFERENCES ZIPCODE (ZIP), 
CONSTRAINT chk_REGISTRATION_DATE CHECK (REGISTRATION_DATE> REGISTRATION_DATE 'TO DATE('26-AUGUST-2005')) 
); 

與最後一個約束任何幫助,這將是非常讚賞我不知道做什麼IM。

不斷看到這則消息:

CONSTRAINT chk_REGISTRATION_DATE CHECK (REGISTRATION_DATE> REGISTRATION_DATE 'TO DATE('26-AUGUST-2005')') 
                      * 
ERROR at line 10: 
ORA-00907: missing right parenthesis 
+0

語法高亮贈送什麼錯誤是:放錯了地方「被解釋爲一個字符串。 – usr 2013-04-07 15:37:15

回答

4

你在你表達幾個錯誤:

  1. to_date()to date()(注意下劃線)
  2. 函數調用不得投入單引號,所以它的to_date(..),而不是'to_date(...)'
  3. 你重複了col umn之後的>這個算子也是錯的。

所以,正確的表達是:

CONSTRAINT chk_REGISTRATION_DATE 
    CHECK (REGISTRATION_DATE > TO_DATE('2005-08-26', 'yyyy-mm-dd')) 

請注意,您應該總是使用to_date()時指定的格式,否則轉換是受服務器和客戶端的NLS設置並可能會產生奇怪的錯誤。

即使您使用格式掩碼,也不應使用取決於當前NLS 語言的文字。 AUGUST可能不適用於所有語言作爲月份名稱。最好使用月份編號。

+0

謝謝你先生/女士,我直到記住格式。 – 2013-04-07 15:51:45

1

試試這個

CREATE TABLE Temp_Student 
(STUD_ID NUMBER (8,0), 
FIRST_NAME VARCHAR2(25) NOT NULL, 
LAST_NAME VARCHAR2(25) NOT NULL, 
ZIP VARCHAR2(5), 
REGISTRATION_DATE DATE NOT NULL, 
CONSTRAINT STUD_ID_PK PRIMARY KEY(STUD_ID), 
CONSTRAINT ZIP_FK FOREIGN KEY (ZIP) 
REFERENCES ZIPCODE (ZIP), 
CONSTRAINT chk_REGISTRATION_DATE CHECK (REGISTRATION_DATE> TO_DATE('26-AUGUST-2005')) 
)