执行CREATE TABLE语句时遇ORA-00907:缺失右括号错误求助
ORA-00907: missing right parenthesis 错误原因及修正方案
导致错误的核心问题是语法不符合Oracle的表定义规范,具体错误点如下:
主键定义写法错误
你将列类型定义和主键约束合并在了同一个括号里,primary key(emp_id number(20))这种写法违反Oracle语法,正确的方式是先定义列,再单独声明主键约束,或者在列定义后直接追加primary key。外键约束冗余语法
在定义dept_no的外键时,FOREIGN KEY(dept_no)属于冗余写法。因为已经在列dept_no后面直接关联约束,只需保留CONSTRAINT fk REFERENCES department(dept_no)即可,多余的外键声明会导致语法解析错误。
另外还有一处逻辑错误(非当前语法错误,但需修正):
- 日期校验逻辑不合理
birth_date date CHECK(birth_date>18)中,日期类型和数字18直接比较没有意义,应该改为校验员工年龄大于18,比如用CHECK(TRUNC(MONTHS_BETWEEN(SYSDATE, birth_date)/12) > 18)来计算年龄并校验。
修正后的完整CREATE TABLE语句
create table employee( emp_id number(20) primary key, emp_name varchar(30), birth_date date CHECK(TRUNC(MONTHS_BETWEEN(SYSDATE, birth_date)/12) > 18), gender varchar(10), dept_no number(20) CONSTRAINT fk REFERENCES department(dept_no), address varchar(50), designation varchar(20) CHECK(designation IN('manager', 'clerk', 'leader', 'analyst', 'designer', 'coder','tester')), salary number(50) CHECK(salary>0), experience number(2), email_id varchar(30) CONSTRAINT chk_email CHECK (REGEXP_LIKE(email_id,'^[A-Za-z0-9_.]+@[A-Za-z]+\.[A-Za-z]{2,4}$')) );
内容的提问来源于stack exchange,提问作者Mit Rao
相关产品推荐
相关产品推荐

