【问题标题】:parent key not found ORA-06512: at "SYS.DBMS_SQL"未找到父键 ORA-06512: 在 "SYS.DBMS_SQL"
【发布时间】:2021-10-28 02:02:57
【问题描述】:

无法找出问题所在,将不胜感激。定义表格和更改时没有问题。由于某种原因,它无法确定另一个表/同一个表中的父键引用。此类问题的可能解决方案是什么?

问题是由 EMP 表约束引起的。


create table DPT (
    DNO             varchar2(3) constraint pri_key primary key,
    DNAME           varchar2(10) constraint unq unique,
    
    constraint sta_letr check(DNO like 'D%')
);

create table PROJECTS (
    DNO             varchar2(3) constraint dno_fork references DPT(DNO) constraint dno_nullState not null, 
    PRJ_NO          varchar2(5) constraint rgexCheck check(PRJ_NO like 'P%') constraint prj_nullState not null, 
    PRJ_NAME        varchar2(10),
    PRJ_CREDITS     number(2) constraint credRange check(PRJ_CREDITS between 1 and 10),
    START_DATE      date,
    END_DATE        date,
    
    constraint prKey primary key(DNO, PRJ_NO),
    constraint dateChecker check(END_DATE > START_DATE)  
);

create table EMP (
    EMPNO           number(4),
    ENAME           varchar2(10),
    EJOB            varchar2(9) default 'CLRK' constraint jobCheck check(EJOB in('CLRK', 'A.MGR', 'MGR', 'GM', 'CEO')),
    MGR_ID          number(4),
    BIRTH_DATE      date,
    SAL             number(7,2) default 20001 constraint salCheck check(SAL > 20000),
    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 supervisor  foreign key(MGR_ID) references EMP(EMPNO),
    constraint pri_ky primary key(EMPNO)
);


--Insertion, Modifications and Alterations

alter table EMP modify PRJ_ID varchar2(5);
alter table EMP drop constraint deptFk;
alter table EMP add constraint deptRef foreign key(DEPTNO, PRJ_ID) references PROJECTS(DNO, PRJ_NO);
alter table DPT add LOCATIONS varchar2(9);
alter table DPT modify LOCATIONS default 'BNG';
alter table DPT add constraint oth_val check(LOCATIONS in ('BNG', 'MNG', 'MUB', 'HYD', 'CHN'));

alter table DPT modify DNAME varchar2(15);

insert into DPT (DNO, DNAME, LOCATIONS) values ('D1', 'Marketing', 'CHN');
insert into DPT (DNO, DNAME, LOCATIONS) values ('D2', 'Research', 'MNG');
insert into DPT (DNO, DNAME, LOCATIONS) values ('D3', 'Administrator', 'BNG');
insert into DPT (DNO, DNAME, LOCATIONS) values ('D4', '', 'BNG');
insert into DPT (DNO, DNAME, LOCATIONS) values ('D5', 'IT', 'BNG');
insert into DPT (DNO, DNAME, LOCATIONS) values ('D6', 'Corporate', 'HYD');


select * from DPT;

insert into PROJECTS (DNO, PRJ_NO, PRJ_NAME, PRJ_CREDITS) values ('D1', 'P1', '', 2);
insert into PROJECTS (DNO, PRJ_NO, PRJ_NAME, PRJ_CREDITS) values ('D2', 'P1', '', 2);
insert into PROJECTS (DNO, PRJ_NO, PRJ_NAME, PRJ_CREDITS) values ('D3', 'P2', '', 7);
insert into PROJECTS (DNO, PRJ_NO, PRJ_NAME, PRJ_CREDITS) values ('D1', 'P3', '', 5);
insert into PROJECTS (DNO, PRJ_NO, PRJ_NAME, PRJ_CREDITS) values ('D4', 'P2', '', 7);

select * from PROJECTS;


--Statement where the problem is occurring.

insert into EMP (EMPNO, ENAME, EJOB, MGR_ID, BIRTH_DATE, SAL, DEPTNO, PRJ_ID, DATE_OF_JOIN) values (100, 'Ravi', 'MGR', 111, to_date('10-10-1985', 'dd-mm-yyyy'), 32000, 'D1', 'P1', to_date('2-10-2001', 'dd-mm-yyyy'));



错误代码:ORA-02291:违反完整性约束 (SQL_OZPTHTLYAAVUSNISLXUTJKQNF.SUPERVISOR) - 找不到父键 ORA-06512:在“SYS.DBMS_SQL”第 1721 行

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您必须按照层次结构的顺序将记录插入EMP 表中,例如首先是经理,然后是员工

    您第一次插入员工100 抱怨EMPNO 111 的经理不存在...

    insert into EMP (EMPNO, ENAME, EJOB, MGR_ID, ...
    values (100, 'Ravi', 'MGR', 111, ...
    

    【讨论】:

    • 非常感谢。
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多