Sql ORA-02291:违反完整性约束(MARTE71.EXPENSE\u PROJECT\u FK)-未找到父项

Sql ORA-02291:违反完整性约束(MARTE71.EXPENSE\u PROJECT\u FK)-未找到父项,sql,oracle,Sql,Oracle,大家好,谢谢你们抽出时间来帮忙。 我一直在制作一个sql脚本,据我所知,除了一个名为expense的表之外,它工作得很好,我已经尝试修复它3天了,但仍然收到一个错误, ORA-02291:违反完整性约束(MARTE71.EXPENSE_PROJECT_FK)-未找到父项 我假设我在费用上犯了外键错误,但是我已经尝试了我所知道的一切,但仍然失败。请您看看我的逻辑,如果可能的话,错误的原因和可能的解决方案 我真的很感激任何帮助和建议。 我将在下面附上我的创建和填充脚本 再次感谢 CREATE

大家好,谢谢你们抽出时间来帮忙。 我一直在制作一个sql脚本,据我所知,除了一个名为expense的表之外,它工作得很好,我已经尝试修复它3天了,但仍然收到一个错误, ORA-02291:违反完整性约束(MARTE71.EXPENSE_PROJECT_FK)-未找到父项

我假设我在费用上犯了外键错误,但是我已经尝试了我所知道的一切,但仍然失败。请您看看我的逻辑,如果可能的话,错误的原因和可能的解决方案

我真的很感激任何帮助和建议。 我将在下面附上我的创建和填充脚本

再次感谢

    CREATE TABLE project
    (
        project_no          NUMBER(4),
        project_code        VARCHAR2(8),
        description         VARCHAR2(50),  
        client_no           NUMBER(4),    
        mgr_no              NUMBER(4),

    CONSTRAINT project_pk           PRIMARY KEY (project_no),
    CONSTRAINT project_employee_fk  FOREIGN KEY (mgr_no) 
                        REFERENCES employee(employee_no)
    );


    -- planned duration is expressed as a number of weeks
    -- fees-basis can take only the following values VS, VN, CS, CN, FQ

    CREATE TABLE stage
    (
        stage_id            NUMBER(4),
        project_no          NUMBER(4),
        stage_no            NUMBER(4),
        description         VARCHAR2(50),
        start_date          DATE,
        planned_duration    NUMBER(4,1),               
        fees_basis          VARCHAR2(2),
        estimate_date       DATE,

    CONSTRAINT stage_pk         PRIMARY KEY (stage_id),
    CONSTRAINT stage_project_fk FOREIGN KEY (project_no) 
                        REFERENCES project (project_no),
    CONSTRAINT p_no_in_stage_nn CHECK (project_no IS NOT NULL)
    );



    CREATE TABLE expense
    (
        expense_id      NUMBER(4),
        description     VARCHAR2(50),
        quantity        NUMBER(2),
        unit_cost       NUMBER(5,2),
        chargeable      CHAR(1),
        project_no      NUMBER(4),
        invoice_no      NUMBER(4),

    CONSTRAINT expense_pk PRIMARY KEY (expense_id),
    CONSTRAINT expense_project_fk   FOREIGN KEY (project_no)
                                    REFERENCES project (project_no),
    CONSTRAINT expense_invoice_fk   FOREIGN KEY (invoice_no)
                                    REFERENCES invoice (invoice_no),
    CONSTRAINT expense_proj_no_nn   CHECK (project_no IS NOT NULL)
    );
和填充脚本

    -- data represents: expence_id, description, quantity, unit_cost, chargeable, project_no, invoice_no
    INSERT INTO expense VALUES (1, 'total expence for building system', 2, 400.00, 'Y', 1, 1);


    -- data represents: project_no, project_code,  description, mgr_no, client_no
    INSERT INTO project VALUES (1,'MISTEST', 'HR System Development',1, 1);
    INSERT INTO project VALUES (2,'ECOM_MS', 'E-commerce System',1, 2);

    -- data represents: stage_id, project_no, stage_no, description, 
    -- start_date, planned_duration, fees_basis, estimate_date
    INSERT INTO stage VALUES (1, 1, 1,'Development of system',  TO_DATE('08-MAY-09','DD-MON-YY'), 40.0, 'VS', TO_DATE('17-JAN-09','DD-MON-YY'));
    INSERT INTO stage VALUES (2, 1, 2,'Testing of system',      TO_DATE('15-JUL-09','DD-MON-YY'), 40.0, 'VS', TO_DATE('17-JAN-09','DD-MON-YY'));
    INSERT INTO stage VALUES (3, 2, 1,'Rquirements Analysis',   TO_DATE('10-JAN-10','DD-MON-YY'), 40.0, 'VS', TO_DATE('17-JUL-10','DD-MON-YY'));

您正在尝试在
项目
之前填充
费用

CREATE TABLE expense
    (
    ...

    CONSTRAINT expense_project_fk   FOREIGN KEY (project_no)
                                    REFERENCES project (project_no)
    ...
    );

DDL脚本中表的顺序似乎对DML脚本很有用。

谢谢Dudu Markovitz,你是对的。我填充表的顺序是个问题,我在项目之后放置了费用,现在一切都好了。我的sql老师从未涉及这一事实,我不知道这是一个问题。感谢您帮助我每一个人,尤其是杜杜·马尔科维茨(Dudu Markovitz)

您给我们的代码太多了,至少有100行或更多。您的错误可能是由于尝试插入指向不再存在的父项的记录而导致的。请把你的问题缩小到最低限度。好的,我只是不确定问题出在哪里,因此我不能删除什么,所以我将在上面做一个精简版本,因为我要花时间筛选这么多代码。@TimBiegeleisen:-)为了澄清,请将insert for expense语句移到insert for project之后。或者将顺序设置为delete语句的相反顺序。