Alex_winf01 Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Ich bin gerade dabei, die Tabellen in Oracle einzupflegen. Dabei habe ich folgendes Problem: CREATE TABLE tabelle1 ( nummer varchar(10) NOT NULL, Jahr Numeric(4) NOT NULL, nummer2 varchar(9) NOT NULL, Primary Key(nummer, Jahr, nummer2) ); CREATE TABLE IGFALL ( kh_id varchar(9) NOT NULL, kd_jahr Numeric(4) NOT NULL, fa_id Numeric(6) NOT NULL, PRIMARY KEY (kh_id, kd_jahr, fa_id), FOREIGN KEY (kh_id, kd_jahr) REFERENCES IK_Ueberleitung (nummer, jahr), ); Nun bekomme ich folgenden Fehler: ORA-02270: kein entsprechender Primär- o. eindeutiger Schlüssel für diese Spaltenliste. Und es ist die Spalte nummer angegeben. Woran kann das liegen? Danke schon mal für die Hilfe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 sieh dir bitte die syntax für CREATE TABLE an. die ist detailliert dokumentiert. 1. dein PK ist unbenannt und wird demnach vom system benannt. 2. dein FK gibt einen unbekannten PK an. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 Also, folgendes habe ich mir angeschaut: CREATE TABLE p ( p1 INTEGER NOT NULL, p2 INTEGER NOT NULL, PRIMARY KEY (p1, p2) ); Was ist da bitte schön anders zu meinem CREATE TABLE: CREATE TABLE tabelle1 ( nummer varchar(10) NOT NULL, Jahr Numeric(4) NOT NULL, nummer2 varchar(9) NOT NULL, Primary Key(nummer, Jahr, nummer2) ); :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tastenstreichler Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Hallo, meiner Meinung nach gehört hinter References der Name der Referenz-Tabelle. Also bei Dir Tabelle1. Tschüss. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 (bearbeitet) @ Tastenstreichler Sorry, da habe ich mich hier im Forum vertippt. Da steht natürlich Tabelle1.:confused: So sieht es bei mir aus: CREATE TABLE IGFALL ( kh_id varchar(9) NOT NULL, kd_jahr Numeric(4) NOT NULL, fa_id Numeric(6) NOT NULL, PRIMARY KEY (kh_id, kd_jahr, fa_id), FOREIGN KEY (kh_id, kd_jahr) REFERENCES Tabelle1(nummer, jahr) ); Bearbeitet 17. September 2008 von Alex_winf01 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tastenstreichler Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Hi, und was ist mit dem Komma vor der letzten Klammer? Oracle ist manchmal etwas pingelig. Tschau. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 @ Tastenstreichler Nö, leider auch nicht. Selbe Fehlermeldung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tastenstreichler Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Ha, jetzt hab ich ihn (ich meine natürlich das Fehlerteufelchen). Du hast in tabelle1 varchar(10) geschrieben und willst mit varchar(9) darauf verweisen!! Ich hoffe das war's auch. Tschüss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 @ Tastenstreichler Leider nicht. Selbe Fehlermeldung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tastenstreichler Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Also ich habe mal die Fehlerausschrift etwas genauer angesehen und für mich sieht es so aus als müsstest Du die beiden Spalten in Tabelle1 erst mit unique zu einem Schlüssel zusammenfassen. Da ja sonst keine eindeutigkeit gewährt wäre. Tschüss. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 @ Tastenstreichler kannst Du mir dafür ein Beispiel geben, wie ich die beiden Spalten mit unique zu einem Schlüssel zusammenfassen muss? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tastenstreichler Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 ALTER TABLE tabelle1 ADD CONSTRAINT tab1_uni UNIQUE(sp1,sp2); Wie Du siehst mache ich es gern erst hinter der Create-Anweisung, damit wird sie nicht so riesig. Tschüss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 @ Tastenstreicher das habe ich jetzt gemacht. Ich bekomme immer noch die selbe Fehlermeldung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tastenstreichler Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Hast Du das geändert? FOREIGN KEY (kh_id, kd_jahr) REFERENCES Tabelle1 (tab1_uni); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 Jetzt bekomme ich eine andere Fehlermeldung: ORA-02256: Zahl der referenzierender Spalten muss gleich sein Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tastenstreichler Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Mein letzter Beitrag war natürlich Quatsch :upps da müssen, die beiden Spalten rein. Kannst du bitte nochmal vollständig Deine beiden Create posten. Ich verliere gerade etwas den Überblick. :nett: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 @ Tastenstreicher gerne: CREATE TABLE tabelle1 ( nummer varchar(9) NOT NULL, Jahr Numeric(4) NOT NULL, nummer2 varchar(9) NOT NULL ); Dann mache ich: alter table tabelle1 add constraint tabelle1_pk unique (nummer, Jahr, nummer2); Dann lege ich die 2. Tabelle an: CREATE TABLE IGFALL ( kh_id varchar(9) NOT NULL, kd_jahr Numeric(4) NOT NULL, fa_id Numeric(6) NOT NULL ); Dann mache ich: alter table IGFALL add constraint igfall_pk unique (kh_id, kd_jahr, fa_id); So, nun soll kh_id als Fremdschlüssel kh_id auf nummer und kd_jahr auf Jahr der Tabelle tabelle1 referenzieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tastenstreichler Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Versuch mal das folgende gleich reinzukopieren. Soviel ich mitbekommen habe, willst Du doch nur jeweils 2 Spalten verbinden? CREATE TABLE tabelle1 ( nummer varchar(9) NOT NULL, Jahr Numeric(4) NOT NULL, nummer2 varchar(9) NOT NULL, Primary Key(nummer, Jahr, nummer2) ); alter table tabelle1 add constraint tabelle1_uni unique (nummer, Jahr); CREATE TABLE IGFALL ( kh_id varchar(9) NOT NULL, kd_jahr Numeric(4) NOT NULL, fa_id Numeric(6) NOT NULL, PRIMARY KEY (kh_id, kd_jahr, fa_id) ); ALTER table igfall ADD CONSTRAINT igfall_foreign FOREIGN KEY(kh_id, kd_jahr) REFERENCES tabelle1 (nummer, Jahr); Ich hoffe ich habe keine Tippfehler gemacht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 17. September 2008 Autor Teilen Geschrieben 17. September 2008 @ Tastenstreichler läuft Fehlerfrei durch. Jetzt muss ich das nur noch auf meine anderen Tabellen anwenden. Danke Dir schon mal. Wenn ich Fragen habe, melde ich mich einfach.:bimei Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 17. September 2008 Teilen Geschrieben 17. September 2008 Hi, also wenn ich auch noch meinen Senf dazu geben darf : 1. Ein PK ist impliziet schon Unique. Da brauchst Du keinen extra Unique Constraint mehr drauf setzen. 2. Ich kann nur dringendst empfehlen keine fachlichen Spalten als PK zu verwenden. Egal wie unveränderbar fest die auch momentan sein mögen. Fachliche Spalten haben in einem rein technischen PK nichts verloren. Dann braucht man auch keine seltsamen Kapriolen zu drehen. Das würde dann z.B. so aussehen: CREATE TABLE tabelle1 ( id number primary key, nummer varchar(9) NOT NULL, Jahr Numeric(4) NOT NULL, nummer2 varchar(9) NOT NULL ); CREATE TABLE IGFALL ( id primary key, id_tabelle1 references tabelle1, kh_id varchar(9) NOT NULL, kd_jahr Numeric(4) NOT NULL, fa_id Numeric(6) NOT NULL ); 3. Der Datentyp in Oracle heißt VARCHAR2. Auch wenn varchar erlaubt ist, ist er grundsätzlich for future use reserviert. Oracle rät davon ab VARCHAR zu verwenden. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.