Hi, und zwar stelle ich mir gerade folgende Frage. Sagen wir ich habe eine Relation person mit Personalnummer, Name und Nachname und dazu eine Relation Arbeitet bei mit Personalnummer und Abteilung. Jetz möchte ich gerne, wenn ich die Personalnummer in der Relation person ändere, dass sich das auch automatisch in der Arbeitet Relation ändert. Ich weiß zwar wie ich die z.b. über einen Schlüssel in Relation bringen kann, aber nicht wie ich die Änderung in beiden vollziehe. Es geht hier um Oracle SQL. Danke
Also diese relation ist käse was machst du wenn zwei arbeitgeber das gleiche nummernsystem verwenden und plötzlich zwei personen die gleiche personalnummer haben ich würds so machen Tablle Personen SID Name Vorname Tablle Arbeitet für SID Personen_UID Personalnummer Unternehmen_UID Tabelle Arbeitgeber SID Unternehmen So kannst du Tabellen für mehrere Sachen verwenden und bist nicht zu spezifisch und flexibel was du noch in Arbeitet für informationen hinzufügst so können auch personen für mehrer unternemen arbeiten und verschiedene personalnummern haben
Nene es geht hier nicht um ein echtes System, sonder um ein beispiel wie das gehen sollte. Ich habe jetzt was gefunden "On Update Cascade" On Delete Cascade geht eins A, aber bei On Update Cascade meint er Missing Keyword?
mikeii schrieb: > Nene es geht hier nicht um ein echtes System, sonder um ein beispiel wie > das gehen sollte. Also um Hausaufgaben. Niemand nimmt $$$$$$ in die Hand, nur um mal mit Oracle spielen zu können, wenn es fast jede andere SQL-Datenbank genauso tun würde. Zum Thema: "on update cascade" ist genau das, was du brauchst. Wenn du eine Fehlermeldung kriegst, hast du dich vermutlich vertippt. Aber um das genau zu sagen, müssen wir exakt wissen, was du eingetippt hast, und was die Datenbank darauf geantwortet hat.
Ja Hausaufgaben ist gut gesagt, eher Vorbereitung auf die Prüfungen CREATE TABLE DJ(DJName Varchar(10),Stundenlohn Number,CONSTRAINT DJ_pk PRIMARY KEY (DJName)); CREATE TABLE arbeitet(DJName Varchar(10),Name Varchar(10),Adresse Varchar(10),Stunden Number); ALTER TABLE arbeitet ADD CONSTRAINT arbeitet_fk FOREIGN KEY (DJName) REFERENCES DJ(DJName) ON UPDATE CASCADE; hab gerade gelesen, dass es ON UPDATE CASCADE gar nicht bei Oracle gibt, aber das steht sogar so in unserem Script drin, welches sich auf Oracle bezieht ...
Fehlermeldung Fehler beim Start in Zeile 7 in Befehl: ALTER TABLE arbeitet ADD CONSTRAINT arbeitet_fk FOREIGN KEY (DJName) REFERENCES DJ(DJName) ON UPDATE CASCADE Fehlerbericht: SQL-Fehler: ORA-00905: Schlüsselwort fehlt 00905. 00000 - "missing keyword" *Cause: *Action:
hab jetz mit oracle nicht so viel gemacht aber evtl hilft dir das http://www.java2s.com/Code/SQLServer/Constraints/DELETECASCADEandUPDATECASCADE.htm dazu musst du anscheinend keys definieren 11> CREATE TABLE works_on1 12> (emp_no INTEGER NOT NULL, 13> project_no CHAR(4) NOT NULL, 14> job CHAR (15) NULL, 15> enter_date DATETIME NULL, 16> CONSTRAINT prim_works1 PRIMARY KEY(emp_no, project_no), 17> CONSTRAINT foreign1_works1 FOREIGN KEY(emp_no) REFERENCES employee(emp_no) ON DELETE CASCADE, 18> CONSTRAINT foreign2_works1 FOREIGN KEY(project_no) REFERENCES project(project_no) ON UPDATE CASCADE)
Ich hab doch den DJName als Primärschlüssel und möchte den in arbeitet als Fremdschlüssel. Das geht auch ohne Probleme auch mit ON DELETE CASCADE, aber OD UPDATE CASCADE geht hier nicht. Und ich find keine Lösung dazu wie ich das anderst machen kann. Ich such mal weiter
Habe gerade erfahren, dass die Lösungen nicht Oracle Konform sein müssen, von daher ist ON UPDATE CASCADE völlig ok. Danke für die Hilfe
mikeii schrieb: > hab gerade gelesen, dass es ON UPDATE CASCADE gar nicht bei Oracle gibt, > aber das steht sogar so in unserem Script drin, welches sich auf Oracle > bezieht ... Naja, es ist halt mehr oder weniger Standard-SQL. Oracle ist eher der Meinung, dass sich Primärschlüssel in Tabellen nicht ändern sollten, deshalb gibt's das da nicht. Lösungsweg 1 (unschön): Trigger "onUpdate" auf die DJ-Tabelle, manuell das "on update cascade" nachrüsten. Lösungsweg 2: andere Datenbank verwenden. Lösungsweg 3: der DJ-Tabelle einen neuen Primärschlüssel verpassen (int würde ich nehmen, mit sequence zum incrementieren) Diesen verknüpfen. Beim Auslesen der "arbeitet"-Tabelle per Subselect oder Join den DJName mit rausholen. evtl. gleich eine View hierfür anlegen.
Das ganze ändern in zwei Tabellen würde ich inkl Kontrolllesen nach Update in eine Transaction packen. Begin transaction update table1 update table2 lese table1 und schau nach ob es passt lese table2 ob es passt passen beide? Schliess die trannsaction sauber ab passt es nicht: rollback transaction End transaction so funktioniert das unter jeder transaction fähigen DB, nicht nur unter hOracle.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.