Entspricht den Funktionen von PostgreSQL array () / array_to_string () in Oracle 9i

8

Ich hoffe, eine einzelne Zeile mit einer kommagetrennten Liste von Werten aus einer Abfrage zurückzugeben, die mehrere Zeilen in Oracle zurückgibt und die zurückgegebenen Zeilen im Wesentlichen in eine einzelne Zeile verflacht.

In PostgreSQL kann dies mit den Funktionen array und array_to_string wie folgt erreicht werden:

Angesichts der Tabelle "Menschen":

%Vor%

Die SQL:

%Vor%

Wird zurückkehren:

%Vor%

Wie würde ich in Oracle 9i dasselbe Ergebnis erzielen?

Danke,

Matt

    
walkermatt 01.12.2010, 17:00
quelle

2 Antworten

5

Tim Hall hat die definitive Sammlung von String-Aggregationstechniken in Oracle .

Wenn Sie bei 9i stecken bleiben, wäre meine persönliche Vorliebe, ein benutzerdefiniertes Aggregat zu definieren (es gibt eine Implementierung von string_agg auf dieser Seite), so dass Sie

haben würden %Vor%

Sie müssen jedoch eine neue Funktion STRING_AGG definieren. Wenn Sie keine neuen Objekte erstellen müssen, gibt es andere Ansätze, aber in 9i werden sie unordentlicher als die PostgreSQL-Syntax.

    
Justin Cave 01.12.2010, 17:07
quelle
1

In 10g bevorzuge ich definitiv die COLLECT-Option, die am Ende von Tims Artikel erwähnt wird.

Das Schöne an diesem Ansatz ist, dass dieselbe zugrunde liegende Funktion (die die Sammlung als Argument akzeptiert) sowohl als Aggregat als auch als Multiset-Funktion verwendet werden kann:

%Vor%

Aber in 9i ist das nicht verfügbar. SYS_CONNECT_BY_PATH ist nett, weil es flexibel ist, aber es kann langsam sein, also sei vorsichtig damit.

    
Dan 01.12.2010 19:55
quelle

Tags und Links