2010-12-06 3 views
3

Hallo Ich entwickle eine Datenbank in Oracle SQL Dev, das versucht, Foriegn Schlüssel aus einer anderen Tabelle zugreifen. Ich arbeite derzeit an der ItemOrdered Tabelle, die ich habe erstellt mit folgenden die AnweisungVerletzte - übergeordnete Schlüssel nicht gefunden 02291. 00000 - "Integritätsbedingung

CREATE TABLE ItemOrdered(OrderID varchar2(9) REFERENCES Ords(OrderID), 
BeltID varchar2(9) REFERENCES BeltID(BeltID), 
Quantity varchar(4) NOT NULL, 
PRIMARY KEY(OrderID, BeltID)) 

CREATE Wie man sehen kann ich folgendes foriegn Tasten Ords und BeltID haben.

Jetzt, wenn ich versuche, die folgende Anweisung

INSERT INTO ItemOrdered VALUES(401565981,234489212,'2') 
laufen

Es gibt mir die Fehler folgenden

verletzt - übergeordnete Schlüssel nicht gefunden 02291. 00000 - "Integritätsbedingung (% s% s.) Verletzt - übergeordnete Schlüssel nicht gefunden"

I zur Verfügung gestellt habe its my Ords CREATE-Anweisung, wenn

benötigt
CREATE TABLE Ords(OrderID varchar2(9) PRIMARY KEY, 
CustomerID varchar(9) REFERENCES Customers(CustomerID), 
    Expected_Delivery_Date date DEFAULT sysdate NOT NULL, 
Actual_Delivery_Date date DEFAULT sysdate NOT NULL, 
    Payment_Due_Date date DEFAULT sysdate NOT NULL, 
Order_Date date DEFAULT sysdate NOT NULL, Price Varchar(10), 
    Order_Placed varchar2(1) CONSTRAINT OrderPlaced 
CHECK(Order_Placed IN('Y','N')) NOT NULL, 
Order_Confirmed varchar2(1) 
    CONSTRAINT Order_Confirmed CHECK(Order_Confirmed IN('Y','N')) NOT NULL, 
Order_Completed varchar2(1) CONSTRAINT Order_Completed 
    CHECK(Order_Completed IN('Y','N')) NOT NULL) 

Und ich habe auch meine vorgesehen BeltID Anweisung CREATE

CREATE TABLE BeltID(BeltID varchar2(9) PRIMARY KEY, 
BeltLengthID varchar2(9) REFERENCES BeltLength(BeltLengthID), 
    ColourID varchar2(9) REFERENCES Colour(ColourID), 
DesignID varchar2(9) REFERENCES Design(DesignID),ComponentID varchar2(9) REFERENCES Component(ComponentID)) 

Ich verstehe nicht ganz, warum ich diesen Fehler bekomme. Gibt es eine klare Erklärung warum?

Hier ist der http-Link von dem, was ich versuche zu tun. link text

+1

Bitte geben Sie Ihre Frage ein. Die SQL-Abfragen sind sehr lang - teilen Sie sie in mehr Zeilen. –

Antwort

7

Aufgrund der Fremdschlüssel-Constraints angegeben Sie, wenn Sie Tabelle erstellt ItemOrdered, wenn Sie diesen Einsatz durchführen:

INSERT INTO ItemOrdered VALUES(401565981,234489212,'2') 

... die Werte 401.565.981 und 234.489.212 auf Schlüsselwerte in den Ords entsprechen und BelitId-Tabellen - dh diese 2 Abfragen sollten Zeilen zurückgeben:

select * 
from Ords 
where OrderId = 401565981; 

select * 
from BeltId 
where BeltId = 234489212; 

Die Fehlermeldung deutet darauf hin, dass dies nicht der Fall ist.

+0

Ich habe den Beitrag bearbeitet, der einen Hyperlink enthält, um ein Beispiel zu zeigen, was ich zu tun versuche. Wenn Sie das Bild betrachten, sehen Sie die Beschwerden-ID und die Abteilungs-ID. Ich versuche jetzt zu implementieren, was ich in der Reklamationstabelle getan habe, aber mit ItemeOrdered. Ich habe den Hyperlink geliefert, um die Dinge etwas klarer zu machen. –

+0

Sorry, aber der Hyperlink macht mir das nicht klar! Sie versuchen, Daten in eine Tabelle mit Fremdschlüsseln einzufügen, und Sie erhalten eine Fremdschlüsselverletzung.Offensichtlich kenne ich Ihren Wissensstand nicht, also entschuldige ich mich, wenn das unhöflich klingt, aber - wissen Sie, was ein Fremdschlüssel ist? –

+0

Ja ich, ein Fremdschlüssel ist eine referenzielle Einschränkung zwischen zwei Tabellen. Alles, was ich einfach versuche zu tun, ist Zugriff auf die BeltID und OrdsID von der Eltern-Tabelle und machen sie zu einem zusammengesetzten Schlüssel wie oben gezeigt. Nachdem Sie in Ihrer ersten Antwort angegeben haben, dass "die Werte 401565981 und 234489212 den Schlüsselwerten in den Tabellen Ords und BelitId entsprechen müssen" Nachdem ich meine Tabellen und die Werte in Ords und BeltID betrachtet habe, stimmen beide Werte überein. –

1

Ich habe keine Oracle-Installation zur Verfügung, so kann ich nicht testen, aber spielt es eine Rolle, wenn Sie die OrderID und BeltID in einfache Anführungszeichen setzen (was sollten Sie trotzdem tun, da die Spalten als varchars deklariert sind)? Ich habe es nicht getestet, aber eine Idee wäre, dass Oracle auf die Tatsache stößt, dass Sie einen numerischen Wert in eine Varchar-Spalte einfügen.

insert 
    into ItemOrdered VALUES('401565981', '234489212','2') 

Eine weitere Option wäre, dass die Reihenfolge der Spalten in der Tabelle nicht der Reihenfolge entspricht, die Sie ihnen in der Anweisung insert gegeben haben. Um dies zu verhindern, schreiben Sie die Anweisung wie folgt um:

insert 
    into ItemOrdered(OrderID,BeltID,Quantity) values('401565981', '234489212','2') 
+0

Ich habe versucht, die Bestell-ID und BeltID mit einfachen Anführungszeichen einzuschließen. Ich habe das versucht und es hat immer noch den gleichen Fehler geliefert, wie bei der anderen Option. –

Verwandte Themen