CREATE TABLE EMPLOYEE (
DISTRICT_ID CHAR(5 BYTE) NOT NULL,
EMP_ID CHAR(5 BYTE) NOT NULL,
EMP_FNAME CHAR(50 BYTE) NULL,
EMP_LNAME CHAR(50 BYTE) NOT NULL,
ZIPCODE CHAR(5 BYTE) NULL,
HIREDATE DATE DEFAULT SYSDATE NULL,
PREVIOUS_EXPERIENCE_YEARS NUMBER(3,1) DEFAULT 0 NULL,
HIGHEST_EARNED_DEGREE CHAR(11 BYTE) DEFAULT 'Bachelors' NULL,
DIRECT_ADMIN_ID CHAR(5 BYTE) DEFAULT (null) NULL,
IS_ADMIN CHAR(1 BYTE) DEFAULT 'N' NOT NULL,
IS_TEACHER CHAR(1 BYTE) DEFAULT 'Y' NOT NULL,
EDU_EMAIL VARCHAR2(20 BYTE) NOT NULL,
CONSTRAINT EMPLOYEE_PK PRIMARY KEY(EMP_ID),
CONSTRAINT EMPLOYEE_FK
FOREIGN KEY(DISTRICT_ID)
REFERENCES DISTRICT(DISTRICT_ID),
CONSTRAINT EMPLOYEE_FK1
FOREIGN KEY(DIRECT_ADMIN_ID)
REFERENCES ADMIN(A_EMP_ID),
CONSTRAINT EMPLOYEE_UK1 UNIQUE(EDU_EMAIL),
CONSTRAINT HIGHEST_EARNED_DEGREEVALUES CHECK
(HIGHEST_EARNED_DEGREE IN ('GRE','High School',
'Associate','Bachelor','Master','Doctorate')),
CONSTRAINT HIREDATE CHECK ('HIREDATE'>='01-Jan-1950'),
CONSTRAINT EDU_EMAIL CHECK ('Anytext'>='2'),
CONSTRAINT EDU_EMAIL CHECK (SELECT = UPPER(EDU)) "Uppercase"
FROM EDU_EMAIL
);
我要做的是添加一个约束来检查有效电子邮件地址的外观,电子邮件只需要正确格式化。此约束需要检查以确保输入EMPLOYEE.EDU_EMAIL的所有电子邮件地址都采用[Anytext @ [ANytext] .edu格式。无论我们在哪里看到[Anytext],都必须至少有2个字符。 edu部分必须是edu,但可以是任何大写模式,如EDU或eDu等。如果电子邮件有两个字符和.edu的任何类型的大小写,则应接受该电子邮件。尝试以某种方式使用UPPER()函数来实现此约束。同样将EMPLOYEE.HIGHEST_EARNED_DEGREE限制为我输入的值,我相信这应该是正确的。并将EMPLOYEE.HIREDATE限制为1950年1月1日或之后,拒绝不可能的条目。任何帮助表示赞赏。当我尝试在Oracle中运行它时,我得到了缺失的表达。
答案 0 :(得分:2)
这个check
约束没有意义:
CONSTRAINT EDU_EMAIL CHECK (SELECT = UPPER(EDU)) "Uppercase" FROM EDU_EMAIL
您不能在检查约束中使用子查询。您可以使用正则表达式。像这样:
CONSTRAINT EDU_MAIL CHECK (REGEXP_LIKE(LOWER(EDU_MAIL), '^[a-z0-9._%+-]+@[A-Za-z0-9.-]+\.edu$')
至少有两个其他约束是不正确的,因为您使用了不合适的单引号。 仅对字符串和日期常量使用单引号。
CONSTRAINT HIREDATE CHECK ('HIREDATE'>='01-Jan-1950'),
CONSTRAINT EDU_EMAIL CHECK ('Anytext'>='2'),
我不知道第二个应该是什么。第一个应该是:
CONSTRAINT HIREDATE CHECK (HIREDATE >= DATE '1950-01-01')