Oracle 实时中不允许的约束规范的可能解决方案



我不知道是什么原因导致这个问题。有谁能帮我查一下吗?Oracle live也没有指定是哪一行导致了问题。


create table EMP (
EMPNO number(4),
ENAME varchar2(10),
EJOB varchar2(9) constraint def_job default 'CLRK',
MGR_ID number(4) constraint supervisor references EMPNO,
BIRTH_DATE date,
SAL number(7,2) constraint salCheck check(SAL > 20000) constraint defSal default 20001,
COMM number(7,2) constraint defComm default 1000,
DEPTNO varchar2(3) constraint deptFk references DPT(DNO),
PRJ_ID varchar2(9) constraint defa_prjID default 'P1', 
DATE_OF_JOIN date,

constraint pri_ky primary key(EMPNO)
);

错误:ORA-02253:这里不允许约束规范

默认值不是约束,所以例如

constraint def_job default 'CLRK'

应该是

default 'CLRK'

此外,约束需要引用一个表和一个可选的唯一列,所以

constraint supervisor references EMPNO

应该

constraint supervisor references emp(empno)

不为外键指定数据类型,允许它们从父列继承,这是一个很好的实践,或者至少是一个好主意。

在创建了dept表之后:

create table dpt (dno integer primary key);
create table emp (
empno           number(4) constraint pri_ky primary key,
ename           varchar2(10),
ejob            varchar2(9) default 'CLRK',
mgr_id          constraint supervisor references emp(empno),
birth_date      date,
sal             number(7,2) default 20001 constraint salcheck check(sal > 20000),
comm            number(7,2) default 1000,
deptno          constraint deptfk references dpt(dno),
prj_id          varchar2(9) default 'P1', 
date_of_join    date
);

最新更新