日期:2014-05-17  浏览次数:20857 次

ORA-02291: 违反完整约束条件 (BEN.SYS_C005646)求解释
create table user_table(userID varchar2(10) primary key ,userName 

varchar2(15) not null,userPwd varchar2(10) not null)----用户表


create table roler(roNo varchar2(10) constraint ro_Pk primary key,roName 

varchar2(15) not null);

create table user_ro(us_ro varchar2(10) constraint ur_Pk primary 
key,userID varchar2(10) references user_table(userID),roNo varchar2(10) 
references roler(roNo));-----用户角色表

现在我建个存储过程来插入数据:
 create sequence auto_id
 start with 1 maxvalue 100000
 increment by 1;
 
drop procedure insert_hd

--创建存储过程
create or replace procedure insert_hd
( userID user_table.userID%type,
  roNo roler.rono%type
 )
as
  id_value number;
  id_len number;
  vid char(10);
begin
  /*for v in 1..n*/
  loop
  select (auto_id.nextval) into id_value from dual;--获得自动生成的序号
  id_len:=length(id_value); -- 判断自动生成的序号的长度,
  -- dbms_output.put_line(id_value);
  case(id_len) --依次来决定序号前增加的0的个数
  when 1 then vid:='ur00000'||id_value;
  when 2 then vid:='ur0000'||id_value;
  when 3 then vid:='ur000'||id_value;
  when 4 then vid:='ur00'||id_value;
  when 5 then vid:='ur0'||id_value;
  when 6 then vid:='ur'||id_value;
  end case;
  --- dbms_output.put_line(vid);
  insert into user_ro
  values(vid,userID,roNo);
  exit when id_value>=1;
  end loop;
end;
commit;

在命令窗口 里面调用存储过程:
SQL> execute insert_hd('u000001','r000003');
之后就报错了:ORA-02291: 违反完整约束条件 (BEN.SYS_C005646) - 未找到父项关键字
ORA-06512: 在 "BEN.INSERT_HD", line 24
ORA-06512: 在 line 2

------解决方案--------------------
ORA-02291:违反完整性约束。

就是你在子表中插入数据,因为子表中有外键引用主表中的主键,但你插入的外键值在主表中没有。

对于本例而言,就是你在user_ro表中插入的某条记录,它的userID在userTabel中没有出现。

请仔细检查你插入的数据。
------解决方案--------------------
select * from user_cons_columns t where t.constraint_name like '%SYS_C005646%' 查询一下是针对哪个表的外键约束了。