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