Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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:

Geschrieben (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 von Alex_winf01
Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...