Ãœbergabe von Textarrays per psql konsole an PL\pgSQL Funktion

Hallo zusammen,

ich möchte einer PL\pgSQL Funktion ein Text Array als IN Parameter übergeben. Allerdings scheitere ich anscheinend an irgendwelchen quotes (Vermutlich)

Funktion:

CREATE OR REPLACE FUNCTION printquery2(
    IN base_value text[]
    ) RETURNS text AS
$$
DECLARE
    text_expression text;
BEGIN
        FOR i IN 1..base_value.length LOOP
            text_expression = text_expression || base_value[i] || ' | ';
        END LOOP;
    
    RETURN text_expression;
END;
$$
LANGUAGE plpgsql;

Aufruf z.B.

select * from printquery2("{'A2', 'A1'}");

Funktioniert leider nicht.

ERROR: column “{‘A2’, ‘A1’}” does not exist

Meine eigentliche Funktion macht was anderes als die Textelemente des Arrays zu konkatenieren. Aber eine Lösung dieses Beispiels würde mir bereits extrem helfen.

Grüße

Sigh



test=*# CREATE OR REPLACE FUNCTION printquery2(
test(#     IN base_value text[]
test(#     ) RETURNS text AS
test-# $$
test$# DECLARE
test$#     text_expression text;
test$#
test$# BEGIN
test$#         text_expression := '';
test$#         FOR i IN 1..array_upper(base_value,1) LOOP
test$#             text_expression = text_expression || base_value[i] || ' | ';
test$#         END LOOP;
test$#
test$#     RETURN text_expression;
test$# END;
test$# $$
test-# LANGUAGE plpgsql;
CREATE FUNCTION
Zeit: 0,653 ms
test=*#
test=*# select * from printquery2(array['bla','fasel','blub']);
      printquery2
-----------------------
 bla | fasel | blub |
(1 Zeile)

3 Dinge:

  • Aufruf mit dem Array als Parameter war flasch
  • nicht initialisierte Variablen sind NULL. Ein NULL-String konkatiert mit irgend etwas bleibt NULL
  • es gibt eine eingebaute Funktion für sowas:
test=*# select array_to_string(array['bla','fasel','blub'], '| ');
 array_to_string
------------------
 bla| fasel| blub
(1 Zeile)

Andreas

Vielen lieben Dank.

Wo in der Doku zu Postgres 8.1 hätte ich das finden können ? (habe nämlich gescucht und gesucht (wohl nicht richtig))

Datentypen, Arrays. Aber das du 8.1 verwendest hast du nicht dazu geschrieben. Ob das konkret jetzt schon in 8.1 oder erst in einer späteren Version klappt, weiß ich nicht.

PostgreSQL: Documentation: Manuals: PostgreSQL 8.1: Arrays

Klappt bei 8.1 :slight_smile:

Vielen Dank nochmal