Wie lernen dForeign Keys vom Primary Key? PLS HELP

olek

Mitglied
Servus @ all

Habe folgende Tabellen in Oracle:

XML_GEMEINDEN
xgem_key NUMBER ---> PK
oestat VARCHAR2(30)
version NUMBER(5)

XML_BETRIEBE
xbnr_key NUMBER ---> PK
betriebsnr NUMBER(10)
uvmnr NUMBER(5),
xgem_key NUMBER ---> KF

Diese beiden habe ich nun erstellt und den FK definiert:

CREATE TABLE xml_gemeinden
(
xgem_key NUMBER
CONSTRAINT pk_xml_gemeinden PRIMARY KEY,
oestat VARCHAR2(30),
version NUMBER(5),
);

CREATE TABLE xml_betriebe
(
xbnr_key NUMBER
CONSTRAINT pk_xml_betriebe PRIMARY KEY,
betriebnr NUMBER(10),
uvmnr NUMBER(5),
xgem_key CONSTRAINT nn_xgem_key NOT NULL
CONSTRAINT fk_xml_betriebe_xml_gemeinden REFERENCES
xml_gemeinden(xgem_key),
);

Nun habe ich für die Tabelle XML_Gemeinden eine fortlaufende ID für den PK erstellt:
Das gleiche habe ich auch mit xml_betriebe gemacht.

CREATE SEQUENCE seq_gemeinden start WITH 1 increment BY 1 nomaxvalue;

CREATE OR REPLACE TRIGGER gemeinden_trigger
before INSERT ON xml_gemeinden
FOR each row
BEGIN
IF :new.xgem_key IS NULL THEN
SELECT seq_gemeinden.nextval INTO :new.xgem_key FROM dual;
END IF;
END;
/

Somit wird nach jedem neuen INSERT eine eindeutige neue ID_Nr vergeben.

NUN MEINE FRAGE:


Wenn ich in der Tabelle XML_Gemeinden ein neues INSERT mache so habe wird eine neue ID erstellt mit meinen Daten.
Wie erkennt bzw. übernimmt nun aber der FK in der Tabelle XML_Betriebe (xgem_key) auch die neue selbe ID die bei XML_Gemeinden erstellt wurde

Wenn ich in XML_Betriebe mit INSERT etwas anlege dann muss ich ja den FK händisch eingeben ... sollte aber von selbst gehen oder

insert into xml_betriebe values(' der autom. key durch trigger' , ' betriebsnr', ' uvmnr ' ,
' hier kommt nun der xgem_key (FK) ');
es muss doch gehn das der xgem_key von selbst erstellt wird
oder? (ich mein indem er vom PK lernt)

Hoffe irgendwer weiss, was ich damit meine *gg*

DANKE.

Cya olek
 
Hi,

also wenn ich dich richtig verstanden haben, willst du, dass die ID im ForeignKey automatisch gesetzt wird.
Wenn du das willst, kannst du das eigentlich nur über einen Trigger lösen. Weil, wo soll das DBMS herwissen, welchen Datensatz es referenzieren soll?

Falls ich dich falsch verstanden hab, versuch dein Problem bitte nochmal zu beschreiben.

mfg
 
Hi .... genau das habe ich gemeint!

Ich brauche einen trigger der automatisch diese ID erstellt .. und zwar dieselbe die auch im PK drinnen ist.

Habe aber keine Ahnung wie man so einen Trigger erstellt :-(

Cya olek
 
Habe aber keine Ahnung wie man so einen Trigger erstellt
Sorry, wenn ich dir nicht glaube, aber du hast doch schon einen Trigger erstellt.

Du erstellst noch einen, der die gewünscht ID von der anderen Tabelle abfragt und an der Stelle einfügt.
Das FK - Feld muss dann aber NULL - Werte zulassen und du musst die Reihenfolge deiner Trigger festlegen (dafür musst du aber in der Hilfe von Oracle nachschauen wie das geht, ich müsste jetzt auch suchen)
 
den anderen trigger habe ich auf einer page gefunden und einfach übernommen.
hatte sonst noch nie was mit diesen triggern zu tun gehabt.

werde dann versuchen so einen auszuprobieren.
hatte nur gedacht dass vielleicht wer ein codebsp zufällig auf lager hat weil jemand das schon gemach hat.

cya olek
 
Hi,

nimm doch einfach den aktuellen Wert der Sequence. Du musst dann einfach nur sicherstellen, dass die Gemeinden und Betriebe in der selben Transaktion gefüllt werden.

Beispiel:

Code:
INSERT INTO xml_betriebe
VALUES ( seq_betriebe.NEXTVAL, 'betriebsnr', 
         'uvm', seq_gemeinden.CURRVAL );
 
Zurück