Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Fremdschlüssel in Oracle

Empfohlene Antworten

Veröffentlicht

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.

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

  • Autor

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:

Hallo,

meiner Meinung nach gehört hinter References der Name der Referenz-Tabelle. Also bei Dir Tabelle1.

Tschüss.

  • Autor

@ 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 von Alex_winf01

Hi,

und was ist mit dem Komma vor der letzten Klammer? Oracle ist manchmal etwas pingelig.

Tschau.

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

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.

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

Hast Du das geändert?

FOREIGN KEY (kh_id, kd_jahr) REFERENCES Tabelle1 (tab1_uni);

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:

  • Autor

@ 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.

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.

Hi,

also wenn ich auch noch meinen Senf dazu geben darf :D :

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.