Array mit Execute füllen

Guten Morgen,

ich habe Probleme beim füllen von Arrays in PL-Funktionen über dynamisch erzeugte Befehle:
was nicht geklappt hat: EXECUTE 'notizid:=(SELECT ARRAY(SELECT…||…||
in der Doku war zu lesen man solle FOR-IN-EXECUTE verweden: funktioniert das nur mit dem Datentyp rec? Auf diesem Weg ein Varchar-Array zu füllen ist mit nicht gelungen

nächste Frage: gibt es einen Befehl der die Inhalte zweier Arrays miteinander vergleicht? Oder muss man das über 2 geschaltelte Schleifen machen?

Vielen Dank!
Gruß, Gerrit



test=# create table array_test(col1 text, col2 text, col3 text);
CREATE TABLE
test=*# insert into array_test values ('foo','bar','batz');
INSERT 0 1
test=*# commit;
COMMIT
test=#
test=#
test=# create or replace function f_array() returns text[] as $$declare a text[]; begin execute 'select array[col1,col2,col3] from array_test' into a; return a; end;$$language plpgsql;
CREATE FUNCTION
test=*#
test=*#
test=*# select * from f_array();
    f_array
----------------
 {foo,bar,batz}
(1 row)



nächste Frage: gibt es einen Befehl der die Inhalte zweier Arrays miteinander vergleicht? Oder muss man das über 2 geschaltelte Schleifen machen?

Vielen Dank!
Gruß, Gerrit

PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Array Functions and Operators


Andreas

Hallo Andreas,
vielen Dank für Deine schnelle Antwort. Meinem Problem ist damit nur bedingt Abhilfe geschaffen,
bisher erhielt ich immer Ergebnisse in Spalten statt in Zeilenform. Diese konnte ich dann innerhalb der Funktion mit array verarbeiten bzw. bzw mit RETURN NEXT rec ausgeben. Meine Frage zu dem Vergleich der Array-Inhalte zielte auch auf diese Spaltenarrays ab.

Gib es eine Möglichkeit auch Spaltenarrays mittels EXECUTE zu füllen?

Nochmals vielen Dank.

Gruß Gerrit

Hab eine Lösung gefunden: Es funktioniert wenn man in eine Record-Variable einliest und in der Schleife die Ergebnisse verarbeitet:

DECLARE
a RECORD;

BEGIN
FOR a IN EXECUTE ‘select kunde_id from tbl_kunde’ LOOP
– Weiterverarbeitung von a.kunde_id
– ggf Ausgabe: RETURN NEXT a.kunde_id
END LOOP;

Dennoch, vielen Dank für die Unterstützung!
Gruß, Gerrit

Also so, wie in der Doku beschrieben.

Dennoch, vielen Dank für die Unterstützung!
Gruß, Gerrit

Nun ja, …


Andreas

Nicht zögern, Rechnung schreiben!