Announcement

Collapse
No announcement yet.

Datensätze zusammenfügen

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

  • Datensätze zusammenfügen

    Hallo,
    folgende Situation:
    ein sehr langer Text wird beim Speichern in einer Oracle-Datenbank in kleine Stücke a 255 Zeichen zerlegt und jedes Teil in einem Extra-Datensatz abgelegt. D.h
    wenn ich den kompleten Text später in meinem Programm( VisualBasic2005, Datenaufruf über: OleDbCommand) aus der Datenbank aufrufen will, dann habe
    ich zunächst eine n-Zahl von Datensätzen, die in einer Schleife wieder zusammengesetzt werden müßen. Das ist natürlich
    keine elegante Lösung, die auch viel Zeit kostet!
    Gigt es denn Möglichkeiten so ein "zerstückelten" Text bereits im Rahemn des
    SQL-Statements zusammenzusetzen? Mit den mir bekannten Aggregat-Funktionen
    von SQL kann man nur nummerische Werte bearbeitet, gibt es was Ähnliches
    auch für String-Datenfelder???
    Wäre für jeden Tipp sehr dankbar!!
    Gruß
    Christoph

  • #2
    manche DBMS (z.B. MySQL, FireBird) können das, ob Oracle eine List-Befehl hat weiss ich nicht.
    Ich würde aber eher das Datenmodell überlegen.

    Comment


    • #3
      so gehts, das With... ist nur für die Testdaten

      WITH temp AS ( SELECT 1 gid, 'text1' textfeld , 1 pos FROM dual UNION
      SELECT 1 gid, 'text2' textfeld , 2 pos FROM dual UNION
      SELECT 1 gid, 'text3' textfeld , 3 pos FROM dual UNION
      SELECT 1 gid, 'text4' textfeld , 4 pos FROM dual UNION
      SELECT 1 gid, 'text5' textfeld , 5 pos FROM dual UNION
      SELECT 2 gid, 'text6' textfeld , 1 pos FROM dual UNION
      SELECT 2 gid, 'text7' textfeld , 2 pos FROM dual UNION
      SELECT 2 gid, 'text8' textfeld , 3 pos FROM dual UNION
      SELECT 3 gid, 'text9' textfeld , 1 pos FROM dual UNION
      SELECT 3 gid, 'text10' textfeld , 2 pos FROM dual
      )
      SELECT gid, MAX(f1)||MAX(f2)||MAX(f3)||MAX(f4)||MAX(f5)||MAX(f 6)||MAX(f7)||MAX(f8) text
      FROM ( SELECT gid
      , DECODE(pos, 1, textfeld, '') f1
      , DECODE(pos, 2, textfeld, '') f2
      , DECODE(pos, 3, textfeld, '') f3
      , DECODE(pos, 4, textfeld, '') f4
      , DECODE(pos, 5, textfeld, '') f5
      , DECODE(pos, 6, textfeld, '') f6
      , DECODE(pos, 7, textfeld, '') f7
      , DECODE(pos, 8, textfeld, '') f8
      FROM temp
      )
      GROUP BY gid
      ;

      Comment


      • #4
        Leider handelt es sich um eine Fremd-Anwenung, folglich habe ich da keinen einfluß auf die DB-Struktur -
        Gruß
        Christoph

        Comment


        • #5
          Danke für Deine Anwort. Kurze Frage: wenn ich Deinen Vorschlag richtig verstehe, dann müßt ich im vorraus wissen wieviele ´Datensätze jeweils ausgelesen werden sollen. Leider variieret die Zahl der Datensätze immer!
          Gruß
          Chirstoph

          Comment


          • #6
            Du könntest dir auch eine SP schreiben, die das für dich erledigt.

            Comment


            • #7
              'Leider variieret die Zahl der Datensätze immer!'

              Es reicht aus die Max-Anzahl zu kennen.

              Comment

              Working...
              X