Hallo,

manchmal hat man folgende Situation:

Bei einer SQL-Abfrage kommen mehrere Datensätze heraus, man möchte aber das Ergebnis in einem einzigen Attribut ablegen bzw. ausgeben (Beispiel: der Person X gehören viele Flurstücke und in einer Auswertung sollen diese mit Komma getrennt in einer Zeile gelistet werden).

Das kann man mit purem SQL nicht erreichen, sondern man benötigt eine Funktion (PLSQL), die die Werte per Schleife hintereinander schreibt:

[code]
CREATE OR REPLACE FUNCTION flst_zu_pers ( persfid IN number ) –variabler Eingabewert = FID der Person
RETURN varchar2 IS

cursor flst is
Select flst_nr –Select für alle Flurstücke, die der Person gehören
from flurstuecke
where fid_eigentuemer = persfid;

ergebnis VARCHAR2(2000);

BEGIN

FOR flstrec IN flst LOOP –Schleife
IF ergebnis is null THEN
ergebnis := flstrec.flst_nr;
ELSE
ergebnis := ergebnis||‘, ‚||flstrec.flst_nr;
END IF;
END LOOP;

IF ergebnis is not null THEN
return ergebnis;
ELSE
return (“);
END IF;

END;
/
[/code]

Um nun das Ergebnis der Funktion herauszubekommen, baut man die Funktion in ein SQL-Statement ein:

1. Wenn man nur das Ergebnis für eine bestimmte Person haben will:

Select flst_zu_pers(123456) from dual;

2. Wenn man alle Personen und zusätzlich noch andere Werte aus der Personentabelle haben will:

Select name, vorname, adresse, flst_zu_pers(fid) from personen;

Viel Spaß beim Ausprobieren,

Gorden Kock

GordenKock
Author: GordenKock