Query von Oralce auf Postgres anpassen: STRING_AGG statt LISTAGG

Probleme und Fragen zum Thema Trigger und Funktionen.
Antworten
cy221
Neuer Benutzer
Beiträge: 2
Registriert: Fr 10. Apr 2015, 12:44

Query von Oralce auf Postgres anpassen: STRING_AGG statt LISTAGG

Beitrag von cy221 »

Hallo Leute,

ich muss ein Java-Tool von Oracle auf Postgres umstellen.

In einem der Queries nutze ich die LISTAGG-Funktion. Equivalent dazu heißt die Postgres-Funtion STRING_AGG. Allerdings erhalte ich eine Fehlermeldung.

Oracle-Query:

Code: Alles auswählen

SELECT c.*, org.name, c_in.d, c_grp_join.group_ids, dfs_c_at.dfs_id FROM c LEFT JOIN ou org on c.ou_idx = org.ou_idx LEFT c_in ON c.c_id = c_in.c_id LEFT dfs_c_at ON c.c_id = dfs_c_at.c_ID LEFT (SELECT c_ID, LISTAGG(c_grp_id, ',') WITHIN GROUP (ORDER BY c_grp_id) AS group_ids FROM c_grp_at group by c_id) c_grp_join ON c.c_ID = c_grp_join.c_ID WHERE c.c_id = ?


Postgres-Query:

Code: Alles auswählen

SELECT c.*, org.name, c_in.d, c_grp_join.group_ids, dfs_c_at.dfs_id FROM c LEFT JOIN ou org on c.ou_idx = org.ou_idx LEFT c_in ON c.c_id = c_in.c_id LEFT dfs_c_at ON c.c_id = dfs_c_at.c_ID LEFT (SELECT c_ID, STRING_AGG(c_grp_id, ',') WITHIN GROUP (ORDER BY c_grp_id) AS group_ids FROM c_grp_at group by c_id) c_grp_join ON c.c_ID = c_grp_join.c_ID WHERE c.c_id = ?


Code: Alles auswählen

ERROR:  function string_agg(bigint, unknown, bigint) does not exist


Ich übergebe der Funktion gar keinen *dritten* Parameter, oder?

Was übersehe ich?

Danke.
Zuletzt geändert von cy221 am Fr 10. Apr 2015, 14:23, insgesamt 1-mal geändert.

castorp
Erfahrener Benutzer
Beiträge: 1209
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Query von Oralce auf Postgres anpassen: STRING_AGG statt LISTAGG

Beitrag von castorp »

string_agg() aggregiert - wie der Name schon sagt - strings.

Du versuchst offensichtlich der Funktion ein bigint zu übergeben. Ein bigint ist aber nun mal kein String. Ausserdem gibt es das WITHIN GROUP bei Postgres nicht.

Versuch's mal mit

Code: Alles auswählen

STRING_AGG(c_grp_id::text, ',' order by c_grp_id)


Alle details dazu im Handbuch: http://www.postgresql.org/docs/current/ ... egate.html
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

cy221
Neuer Benutzer
Beiträge: 2
Registriert: Fr 10. Apr 2015, 12:44

Re: Query von Oralce auf Postgres anpassen: STRING_AGG statt LISTAGG

Beitrag von cy221 »

Vielen Dank. Ich habe WITHIN GROUP entfernt. Es scheint nun zu funktionieren.

Antworten