Direkter Zugriff auf multidimensionales array

Hallo zusammen,

ich habe eine pl/pgsql funtion geschrieben die ein 2 dimensionales array als eingabeparameter bekommt.

das array enthält als value pro element ein weiteres array.

‘{{1,2,3,4},{20,30,40,50},{33,44,55,66},{41,42,43,45}}’

Testcode:

CREATE OR REPLACE FUNCTION arraytest(
    IN testarray text[][]
    ) RETURNS void AS
$$
DECLARE
BEGIN
    FOR i IN 1..array_upper(testarray,1) LOOP
            RAISE NOTICE 'testarray %', testarray[i]::text[];
    END LOOP;
END;
$$
LANGUAGE plpgsql;
 

Testaufruf:

select arraytest('{{1,2,3,4},{20,30,40,50},{33,44,55,66},{41,42,43,45}}');
 

nun ist es so, das ich die 2. dimension des arrays als 1dim array weiterverarbeiten möchte.

Also wenn ich auf testarray zugreife das ich ‘{1,2,3,4}’ zurückbekomme.

Allerdings beiße ich mir da gerade die Zähne aus.

so wie es im der testcode steht kommt immer null heraus.

Innerhalb des Loops funktioniert zwar testarray[i:i]::text[] anstatt testarray::text[] aber es gibt mir dann {{1,2,3,4}} zurück (und die folgefunktion soll wie gesagt einfach wieder nur mit einem 1dim array arbeiten)

Leider finde ich nur Beispiele wie man auf die einzelnen elemente der 2. dim zugreifen kann. aber nicht wie man die 2. dim insgesamt als einzelnes array adressiert (in php wuerde ich halt einfach array[num] machen und gut wäre es.

Grüße

Sigh

hm das einzige was es hier so bei mir macht ist der folgende codesnipsel

    FOR i IN 1..array_upper(testarray,1) LOOP
        query_v = '';
        FOR j IN 1..array_upper(testarray,2) LOOP
            query_v = query_v || quote_literal(testarray[i][j]) || ',';
        END LOOP;
        query_v = trim(trailing ',' from query_v);
        subarray = 'array[' || query_v || ']';
     END LOOP;
 

wie gesagt finde ich die 2. forschleife sehr unschoen aber was soll man machen :slight_smile:


Grüße

Sigh