2016-12-10 2 views
0

Wenn ich Daten in die ASSIGNMENTS-Tabelle einfüge, funktioniert alles einwandfrei, mit Ausnahme der HARDWARE- und SOFTWARE-Werte, die genauso wie die anderen codiert sind. Ich verstehe es einfach nicht.Warum wird der Elternschlüssel nicht gefunden?

Dies funktioniert:

INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID) 
VALUES ('A0005','B0002','ST002','J0002'); 

Aber wenn ich versuche, Werte für Hardware oder Software enthalten, wie folgt aus:

INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID, HARDWARE_ID) 
VALUES ('A0005','B0002','ST002','J0002','H0002'); 

bekomme ich nur die folgende Fehlermeldung: SQL-Fehler: ORA-02291 : Integritätseinschränkung (JAS1224.SYS_C0028418) verletzt - Parentschlüssel nicht gefunden 02291. 00000 - Integritätsbedingung (% s.% s) verletzt - Parentschlüssel nicht gefunden Ursache: Ein Fremdschlüsselwert hat keinen übereinstimmenden Primärschlüsselwert . * Aktion: Löschen Sie den Fremdschlüssel oder fügen Sie einen passenden Primärschlüssel hinzu.

Hier ist der gesamte Code und alle Tabellen korrekt eingesetzt wurden (die Hardware- und Software-Tabellen werden in genau dem gleichen Format wie die Mitarbeiter Tabelle codiert):

CREATE TABLE PROJECT 
(PROJECT_ID CHAR(5) NOT NULL, 
PROJECT_NAME CHAR(20), 
PROJECT_TYPE CHAR(20), 
START_DATE DATE, 
END_DATE DATE, 
PRIMARY KEY (PROJECT_ID)); 

CREATE TABLE HARDWARE 
(HARDWARE_ID CHAR(5) NOT NULL, 
HARDWARE_NAME CHAR(20), 
PRIMARY KEY (HARDWARE_ID)); 

CREATE TABLE SOFTWARE 
(SOFTWARE_ID CHAR(5) NOT NULL, 
SOFTWARE_NAME CHAR(20), 
PRIMARY KEY (SOFTWARE_ID)); 

CREATE TABLE STAFF 
(STAFF_ID CHAR(5) NOT NULL, 
STAFF_NAME CHAR(20), 
PRIMARY KEY (STAFF_ID)); 

CREATE TABLE JOB 
(JOB_ID CHAR(5) NOT NULL, 
JOB_TYPE CHAR(20), 
JOB_GRADE CHAR(20), 
PRIMARY KEY (JOB_ID)); 

CREATE TABLE ASSIGNMENTS 
(ASSIGNMENT_ID CHAR(5) NOT NULL, 
PROJECT_ID CHAR(5), 
STAFF_ID CHAR(5), 
JOB_ID CHAR(5), 
HARDWARE_ID CHAR(5), 
SOFTWARE_ID CHAR(5), 
PRIMARY KEY (ASSIGNMENT_ID), 
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID), 
FOREIGN KEY (STAFF_ID) REFERENCES STAFF(STAFF_ID), 
FOREIGN KEY (JOB_ID) REFERENCES JOB(JOB_ID), 
FOREIGN KEY (HARDWARE_ID) REFERENCES HARDWARE(HARDWARE_ID), 
FOREIGN KEY (SOFTWARE_ID) REFERENCES SOFTWARE(SOFTWARE_ID)); 
+0

Haben Sie tatsächlich eine Zeile in der 'HARDWARE' Tabelle, wo' HARDWARE_ID = 'H0002''? Verstehen Sie, wie Primärschlüssel und Fremdschlüssel, die auf Primärschlüssel verweisen, funktionieren? – mathguy

+0

tue ich, und als ich diese Frage stellte, war ich mir sicher, dass die Daten bereits eingefügt waren und dass alles da war - aber ich musste einen Fehler gemacht haben und die Zeilen nicht so ausgefüllt haben, wie ich mir sicher war. Der ganze Code war geschrieben und fertig Ich muss es einfach nicht ausgeführt haben, obwohl ich dachte, ich hätte es getan. – JadstaSeven

+0

:-) Keine Sorge, das passiert jedem. – mathguy

Antwort

0

Die Fehlermeldung sein kann ein bisschen kryptisch, aber es ist ziemlich klar.

Der einzige Unterschied zwischen den beiden INSERT s ist für HARDWARE_ID. Daher ist 'H0002' keine gültige HARDWARE_ID. Es ist nicht in der Tabelle HARDWARE.

+1

Vielen Dank! Es war ein kleiner Fehler, den ich nicht bemerkte, ich habe versucht, es für fast 2 Stunden zu beheben. Ich sah deine Antwort und dachte, ich würde versuchen, alle Tische fallen zu lassen und den Code wieder einzufügen, um sicherzugehen, dass alles da ist und es funktioniert! Du hattest recht, ich muss die Daten in der Hardwaretabelle nicht richtig überprüft haben. Danke für die schnelle Antwort, das hat mir sehr geholfen: D – JadstaSeven

Verwandte Themen