Oracle Constraints setzen

xerses

Mitglied
Hiho..Ich habe mal wieder ein Problem :-(

Ich habe mir hier folgende Tablle für eine DB-Uebung erstellt.

Create Table adressen (
lfdnr number(5) not null,
pnr number(5) not null,
strasse char(20),
hausnr char(4),
plz number(5),
ort char(20),
st_datum date default sysdate,
end_datum date,
CONSTRAINT PK_ADRESSEN_PNR PRIMARY KEY(lfdnr))

Jetzt darf ein halter, der über PNR referenziert wird, mehrere Adressen haben. Allerdings darf er nur eine zur Zeit besitzen, d.h. wenn er umzieht, soll das end_datum gesetzt und eine neue Adresse eingefügt werden. Ich möchte jetzt gern beim einfügen eines Datensatzes überprüfen, ob bei dem jeweiligen halter der adresse noch ein Datensatz existiert bei dem noch kein end_datum gesetzt wurde. Es darf somit für jeden Halter nur eine Adresse existieren, bei der kein end_datum gesetzt wurde. Hat jemand eine Idee wie man das realisieren könnte? Mit einem Check-Constraint habe ich das nicht wirklich hinbekommen, da ich da nicht gruppieren kann. Wäre bei jeder Hilfe und jedem Tip sehr dankbar

Mit freundlichen weinachtlichen Grüßen

xerses
 
Hallo!

Wie wärs denn wenn du einen Trigger auf die Tabelle legen würdest welcher bei der Insert Action Aktiv wird und die Aufgabe für dich übernimmt...

Gruß Tom
 
Ein Trigger wird hier leider nicht funktionieren, denn der Trigger müsste Datenstätze der Tabelle ändern auf der er selbst sitzt. Das führt dann zu einem

ORA-04091:table xyz mutating, trigger/function may not see it

Im Metalink gibt es dazu sehr ausführliche Hilfestellungen z.B. Doc ID 37906.1
Alle Workarounds laufen jedoch auf PL/SQL Prozeduren hinaus. D.h. am einfachsten wäre es eine Prozedur zu schreiben, die neue Adressen einpflegt und gleichzeitig die aktuelle Adresse "abschließt".
 
Zurück