Announcement

Collapse
No announcement yet.

SELECT FOR UPDATE --> Update

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SELECT FOR UPDATE --> Update

    Hallo,

    ich möchte einen SELECT mit Substr() ausführen (wird als AS selektiert) und anschliessend diesen Datensatz über Cursor updaten.
    Anforderungen:
    - Select liefert mehrere Datensätze
    - Select soll in einer Virtuellen Tabelle zwischengespeichert werden
    - Aus dieser virtuellen Tabelle möchte ich direkt den Update durchführen
    - Beim Update soll ein Datenbankfeld mit dem neuen As-Feld überschrieben werden, dass vorher mit substr() zusammengebaut wurde

    Ich hoffe das ganze ist nicht zu wirr formuliert :-)


    Folgenden Beispielcode habe ich hierfür gefunden.
    DECLARE
    dummy_var emp.empno%TYPE;
    CURSOR c_emp IS SELECT empno FROM emp
    <WHERE clause>
    FOR UPDATE OF empno;
    BEGIN
    OPEN c_emp;
    LOOP
    FETCH c_emp INTO dummy_var;
    EXIT WHEN c_emp%NOTFOUND;

    -- Do some processing on dummy_var

    UPDATE emp SET empno=dummy_var
    WHERE CURRENT OF c_emp;
    COMMIT;
    END LOOP;

  • #2
    Schön, wenn du schon einen Beispielcode gefunden hast

    Hast du vielleicht vergessen deine Frage zu formulieren?
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hi,

      danke. Die Frage ist eigentlich, ob das ganze mit den Anforderungen funktioniert. Ich möchte im SELECT-Teil auch einen SUBSTR verwenden. Gehet dass dann nur mit einem AS? (...für schreibenden Zugriff).

      Wie gut ist die Performance bei z.B. 3 gejointen Tabelle + Cursor im Vergleich zu einen Nur-Select? Bei mir werketl das Teil seit 2 Stunden und werkelt....

      Comment


      • #4
        im Zweifel würde ich immer das einfache SQL-Statement wählen, das in aller Regel effizienter ist als die prozedurale Lösung.

        Aber ohne die zugehörigen Daten, die Indizierung und den Zugriffsplan des cbo zu kennen, kann man die Frage eingentlich nicht ernsthaft beantworten.

        Gruß

        MP
        http://martinpreiss.blogspot.com/

        Comment


        • #5
          Originally posted by mark0079 View Post
          ...Wie gut ist die Performance bei z.B. 3 gejointen Tabelle + Cursor im Vergleich zu einen Nur-Select? Bei mir werketl das Teil seit 2 Stunden und werkelt....
          Also wenn eine Oracle-DB an einem 3-fach-Join mehr als 2 Stunden "werkelt", dannist irgendwass im Argen. Hast du dir ggfs. eine Endlosschleife programmiert?


          Originally posted by mark0079 View Post
          ...Ich möchte im SELECT-Teil auch einen SUBSTR verwenden. Gehet dass dann nur mit einem AS? (...für schreibenden Zugriff). ...
          Das mit dem schreibenden Zugriff verstehe ich nicht ganz, aber prinzipiell ist es kein Problem in einem Cursor ein berechnetes Feld zu verwenden. Dieses kann dann auch einen Alias erhalten (das AS-Schlüsselwort kann weggelassen werden), muß es aber nicht, da die Felder anhand ihrer Position in den Ergebnis-Record gefetcht werden.

          Ansonsten kann ich mich nur MPr anschließen - Performance-Aussagen ohne konkrete Kenntniss der Bedingungen hat immer auch etwas vom Blick in die berühmte Glaskugel

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment

          Working...
          X