create table depart
(dno char(9) primary key 
check (dno between 3001 and 3003),
dname char(10),
daddr char(10)
);create table job
(jno char(9) primary key check(jno in('2001','2004','2007','2008')),
jname char(10),
jdesc char(50)
);create table staff
 (sno char(9) primary key,
 sname char(10),
 ssex char(2),
 semail char(15),
 stel char(12),
 swage int,
 spos char(10),
 sdept char(20),
foreign key(sdept) references depart(dno),
foreign key(spos) references job(jno)
 );
 这是我创建的三个表,当job,depart表建立完毕后(即插入完数据后),
在向staff插入数据
insert
into staff 
values('0003','赵克佳','女','[email protected]','0411-546891',2400,'2007','3003');时,出现如下问题:
SQL> insert
  2  into staff 
  3  values('0003','赵克佳','女','[email protected]','0411-546891',2400,'2007','3003');
insert
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (SYSTEM.SYS_C005285) - 未找到父项关键字
我这里只有两个约束条件,且填入的数据都是符合的呀!!!
怎么回事???
请教!!!

解决方案 »

  1.   

    查一下  SELECT * FROM USER_CONSTRAINTS WHERE constraint_name='SYS_C005285' 这个是哪个约束如果就是你建立的那两个外键的话,那肯定是你插入的数据在外键表里没有.'2007'在job这个表
    '3003'在depart这个表
    都是否有相关数据.
      

  2.   

    定义外键的时候父表和子表的相对应的属性列类型必须相同
    在你的depart 表里面dno char(9) 而在staff表里面是sdept char(20), dno和sdept都是char类型,但是一个是20个字符,一个是9个字符
    改为sdept char(9),spos char(9) 应该就可以了
    create table staff 
    (sno char(9) primary key, 
    sname char(10), 
    ssex char(2), 
    semail char(15), 
    stel char(12), 
    swage int, 
    spos char(9), 
    sdept char(9), 
    foreign key(sdept) references depart(dno), 
    foreign key(spos) references job(jno) 
    ); 把你原来建的表删了  然后重新建一下!