0

需要一些帮助:

创建一个名为 TEMP_STUDENT 的表,其中包含以下列和约束:STUD_ID 列用于学生 ID 并且是主键,FIRST_NAME 列用于学生名字,LAST_NAME 列用于学生姓氏,ZIP 列是外键Student Database Schema 的 ZIPCODE 表中的 ZIP 列,以及一个非 NULL 列 REGISTRATION_DATE 并且具有 CHECK 约束以将注册日期限制为 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'))
);

对于最后一个约束的任何帮助,我不知道我在做什么,将不胜感激。

不断收到此消息:

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

2 回答 2

6

您的表达式中有几个错误:

  1. to_date()不是to date()(注意下划线)
  2. 函数调用不能放在单引号中,所以它是to_date(..), 不是'to_date(...)'
  3. 您在运算符之后重复了该列,>这也是错误的。

所以正确的表达是这样的:

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

请注意,使用时应始终指定格式,to_date()否则转换受服务器和客户端的 NLS 设置影响,可能会产生奇怪的错误。

即使您使用格式掩码,也不应该使用依赖于当前 NLS语言的文字。AUGUST可能不适用于所有语言作为月份名称。最好使用月份数。

于 2013-04-07T15:31:40.107 回答
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'))
)
于 2013-04-07T17:46:23.017 回答