![]() |
Datenbank: Oracle • Version: 10 • Zugriff über: Toad
pl/sql Schleife + Update
Hallo,
ich hab da mal ne Frage... Und zwar möchte ich eine Spalte meiner Tabelle (Tab1) Werte aus einer zweiten Tabelle (Tab2) einfügen. Beide Tabellen haben eine identische Spalte. Ich wollte in einer Schleife durch alle Sätze der Tab1 und gleichzeitig, in einer weiteren Schleife durch Tab2, um die Sätze zu ermitteln, die zusammengehören, um dann in Tab1 den Wert aus Tab2 hinzuzufügen... Leider will das nicht so wie ich es gern hätte... Hoffe ihr könnt mir Verbesserungsvorschläge und Tips nennen. Hier mal mein falscher Ansatz...
Code:
Danke schonmal!
begin
CURSOR cur1 IS SELECT a.Name_ID, a.Nachname_ID from Tab1 a, Tab2 b where b.Name_ID = a.Name_ID; CURSOR cur2 IS SELECT b.Name_ID, b.Nachname_ID from Tab1 a, Tab2 b where b.Name_ID = a.Name_ID; FOR rec_1 IN cur1 LOOP For rec_2 in cur2 loop begin update Tab1 set rec_1.Nachname_ID = rec_2.Nachname_ID where rec_1.Name_ID = Rec_2.Name_ID; end; end loop; end loop; end; |
AW: pl/sql Schleife + Update
Warum nicht einfach einen Join?
|
AW: pl/sql Schleife + Update
Wie genau meinst du das?
SOrry dumme Frage ich weiß :( |
AW: pl/sql Schleife + Update
Hallo!
Ich kenne mich zwar mit Oracle nicht aus, aber das folgende sollte gehen, falls zwischen Name_ID und Nachname_ID eine 1:1-Beziehung besteht:
Code:
Funktioniert allerdings nur, wenn der Select für jeden Name_ID nur einen Satz zurück gibt. Falls das Paar Name_ID-Nachname_ID mehrmals in der Tabelle vokommt, hilft das nächste:
update Tab1 set Nachname_ID = (select Nachname_ID from Tab2 where Tab2.Name_ID = Tab1.Name_ID);
Code:
Und falls Du gar keine 1:1-Beziehung hast, geht es leider so gar nicht. In diesem Fall poste doch mal die komplette Tabellenstruktur und ein paar Beispieldatensätze.
update Tab1 set Nachname_ID = (select max(Nachname_ID) from Tab2 where Tab2.Name_ID = Tab1.Name_ID);
Viele Grüße |
AW: pl/sql Schleife + Update
Danke für die Antwort, kann es leider grade nicht ausprobieren, aber ich kann dir meine Tabellenstruktur nennen.
Hab leider so ziemlich gar keine Ahnung. Beschäftige mich nur so am Rande mit SQL und PL/SQl, deswegen sind das auch nur Beispieltabellen, weil ich so ein bisschen am rumprobieren bin. Deswegen bin ich für jegliche Infos und Erklärungen dankbar, die mich ein wenig schlauer machen. Also Tabelle 1 hat im moment eigentlich nur 3 Spalten: (Ich veranschauliche mal mit nicht mit den ID's sondern benutze den Klartext) Spalte Name_ID | Spalte Adresse | Spalte Nachname_ID -------------------------------------------------------- Melanie | Musterstraße | -------------------------------------------------------- Thomas | Beispielstraße | -------------------------------------------------------- Max | Turmstraße | -------------------------------------------------------- Tabelle 2 besitzt ebenfalls die Spalten Name_ID und Nachname_ID Spalte Name_ID | Spalte Nachname_ID ------------------------------------- Melanie | Musterfrau ------------------------------------- Thomas | Mustermann ------------------------------------- Und um jetzt nochmal genauer zu werden: Meine erste Tabelle hat ungefähr 50 Datensätze, die zweite etwa 15. Deswegen dachte ich an eine Schleife, die durch meine 1. Tabelle läuft und dann durch die 2. und prüft, ob der Wert Name_ID übereinstimmt und den Wert für Nachname_ID von der 2. in die 1. übernimmt... Deswegen versteh ich das mit dem Join nicht... Danke nochmals. Lg E: Danke Delphianer! Der erste Code hat funktioniert! Es interessiert mich trotzdem noch, wie ich das denn mit einer Schleife gemacht hätte. Oder war mein Ansatz wirklich so falsch? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz