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

解决方案 »

  1.   

    ORA-02291:违反完整性约束。就是你在子表中插入数据,因为子表中有外键引用主表中的主键,但你插入的外键值在主表中没有。对于本例而言,就是你在user_ro表中插入的某条记录,它的userID在userTabel中没有出现。请仔细检查你插入的数据。
      

  2.   

    select * from user_cons_columns t where t.constraint_name  like '%SYS_C005646%' 查询一下是针对哪个表的外键约束了。
      

  3.   

    你的user_ro表引用了user表的主键,这样你直接插数据到user_ro表而user表却不存在这条数据,那这个引用就出错了啊。所以你必须要在你的父表user里面先插入这条数据对应的记录!