Oracle Live报constraint specification not allowed here错误求助
问题原因排查
报错释义
ORA-02253 中文含义为:此处不允许使用约束规范,Oracle仅允许在CHECK、PRIMARY KEY、FOREIGN KEY、UNIQUE、NOT NULL这几类合法约束定义前加CONSTRAINT [约束名]前缀,你代码中的违规用法就是触发报错的核心原因。
具体错误点
- 错误1:
DEFAULT是列的默认值属性,不属于约束范畴,不能加CONSTRAINT前缀做命名,以下4行都存在该问题:- EJOB字段定义:
EJOB varchar2(9) constraint def_job default 'CLRK' - SAL字段定义:
SAL number(7,2) constraint salCheck check(SAL > 20000) constraint defSal default 20001 - COMM字段定义:
COMM number(7,2) constraint defComm default 1000 - PRJ_ID字段定义:
PRJ_ID varchar2(9) constraint defa_prjID default 'P1'
- EJOB字段定义:
- 错误2:外键关联语法错误,
REFERENCES后必须指定「关联表名(关联字段名)」,你MGR_ID字段直接写references EMPNO不符合语法要求,应为references EMP(EMPNO)关联当前表的EMPNO主键字段。
修正后完整SQL
create table EMP ( EMPNO number(4), ENAME varchar2(10), EJOB varchar2(9) default 'CLRK', MGR_ID number(4) constraint supervisor references EMP(EMPNO), BIRTH_DATE date, SAL number(7,2) constraint salCheck check(SAL > 20000) default 20001, COMM number(7,2) default 1000, DEPTNO varchar2(3) constraint deptFk references DPT(DNO), PRJ_ID varchar2(9) default 'P1', DATE_OF_JOIN date, constraint pri_ky primary key(EMPNO) );
额外注意事项
执行上述修正后的SQL前,请确认DPT表已提前创建,且DPT表的DNO字段类型为varchar2(3),否则DEPTNO字段的外键约束会创建失败。
内容的提问来源于stack exchange,提问作者Nice-Willow
相关产品推荐
相关产品推荐

