Martin1968 Geschrieben 21. Mai 2009 Geschrieben 21. Mai 2009 Moin! Ich habe mich bei der Ertellung meines Datenmodells vertan und muss nun Werte einer BEstimmten Tabelle umbiegen. Da ich den neuen Wert einigermaßen aufwändig ermitteln muss reicht wohl kein einfaches update. Jetzt denke ich über ein Procedure nach, die das für mich erledigt. Davon habe ich schon einige geschrieben, allerdings eher für spezielle Auswertungen und nicht zur Datenmanipulation. Ich stelle mir das so vor, dass ich die Zeilen der Tabelle einzeln durchgehe, mir den alten Wert auslese, den neuen "errechne" und dann zurückschreibe. Mit Schleifen habe ich nat. auch gearbeitet, aber der Zeilenweise Zugriff auf die Tabellenwerte macht mir Kopfzerbrehcen - geht das mit dem "CURSER" ? Wäre toll, wenn mir jemand helfen könnte. Martin
robotto7831a Geschrieben 21. Mai 2009 Geschrieben 21. Mai 2009 Hallo, ein Cursor ist genau der richtige Ansatz. Oracle PL/SQL Tutorial: SQL Frank
Martin1968 Geschrieben 21. Mai 2009 Autor Geschrieben 21. Mai 2009 (bearbeitet) Danke, ich werde mir das Tuturial ansehen. Martin Bearbeitet 21. Mai 2009 von Martin1968
dr.dimitri Geschrieben 21. Mai 2009 Geschrieben 21. Mai 2009 Jungs - es gilt der alte Leitsatz: mache nie etwas mit PL/SQL wenn es auch mit reinem SQL geht. Ein einfacher UPDATE reicht vollkommen aus, da braucht man kein PL/SQL und explizite Cursor. Dim
Martin1968 Geschrieben 22. Mai 2009 Autor Geschrieben 22. Mai 2009 Guten Morgen Dr. Dimitri, ich habe natürlich auch erst an ein Update gedacht, aber das überfordert mich anscheinend :-) Folgendes select listet den zu ändernden Wert und den Wert der neu in die Spalter Att_value gehört: select av.att_value, kst.obj_id from attribute_values av, object kst where av.att_id = 81662 and av.att_value in (select kst.gr_id from object kst where kst.cl_id = 10112 and kst.gr_class = 10001 and kst.gr_id = att_value) and kst.cl_id = 10112 and kst.gr_id = av.att_value Mein Problem ist, dass ich nicht weiss, wie ich den Join zwischen beiden selects innerhalb des Update-Statements verarbeite. Vielleicht kann mir hemand von Euch auf die Sprünge helfen ? Martin
dr.dimitri Geschrieben 22. Mai 2009 Geschrieben 22. Mai 2009 Hi, das nennt sich correlated subquery: UPDATE tabelle a SET (spalte1,spalte2)=(select spalteA,spalteB FROM tabelle b WHERE [b]a.id=b.id[/b] --Hier werden die beiden Mengen eindeutig miteinander verknüpft AND ...) WHERE a.spalteXY=... --Hier evtl. noch die zu berücksichtigende Menge einschränken Dim
Martin1968 Geschrieben 22. Mai 2009 Autor Geschrieben 22. Mai 2009 Hi, das nennt sich correlated subquery: UPDATE tabelle a SET (spalte1,spalte2)=(select spalteA,spalteB FROM tabelle b WHERE [b]a.id=b.id[/b] --Hier werden die beiden Mengen eindeutig miteinander verknüpft AND ...) WHERE a.spalteXY=... --Hier evtl. noch die zu berücksichtigende Menge einschränken Dim Muss ich jetzt erst mal genauer anschauen, aber VIELEN DANK!:uli
Martin1968 Geschrieben 22. Mai 2009 Autor Geschrieben 22. Mai 2009 Muss ich jetzt erst mal genauer anschauen, aber VIELEN DANK!:uli Hat funktioniert - Klasse!
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden