AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

pl/sql Schleife + Update

Ein Thema von Ms.Invisible · begonnen am 21. Sep 2010 · letzter Beitrag vom 21. Sep 2010
Antwort Antwort
Ms.Invisible

Registriert seit: 10. Sep 2010
3 Beiträge
 
#1

pl/sql Schleife + Update

  Alt 21. Sep 2010, 18:34
Datenbank: Oracle • Version: 10 • Zugriff über: Toad
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:
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;
Danke schonmal!
Marie
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: pl/sql Schleife + Update

  Alt 21. Sep 2010, 18:38
Warum nicht einfach einen Join?
Markus Kinzler
  Mit Zitat antworten Zitat
Ms.Invisible

Registriert seit: 10. Sep 2010
3 Beiträge
 
#3

AW: pl/sql Schleife + Update

  Alt 21. Sep 2010, 18:50
Wie genau meinst du das?
SOrry dumme Frage ich weiß
Marie
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: pl/sql Schleife + Update

  Alt 21. Sep 2010, 20:57
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:
update Tab1 set Nachname_ID = (select Nachname_ID from Tab2 where Tab2.Name_ID = Tab1.Name_ID);
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:

Code:
update Tab1 set Nachname_ID = (select max(Nachname_ID) from Tab2 where Tab2.Name_ID = Tab1.Name_ID);
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.

Viele Grüße
  Mit Zitat antworten Zitat
Ms.Invisible

Registriert seit: 10. Sep 2010
3 Beiträge
 
#5

AW: pl/sql Schleife + Update

  Alt 21. Sep 2010, 21:17
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?
Marie

Geändert von Ms.Invisible (22. Sep 2010 um 07:35 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz