PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Boucle sur la dimension du tableau dans plpgsql

Depuis PostgreSQL 9.1 il y a le pratique FOREACH :

DO
$do$
DECLARE
   m   varchar[];
   arr varchar[] := array[['key1','val1'],['key2','val2']];
BEGIN
   FOREACH m SLICE 1 IN ARRAY arr
   LOOP
      RAISE NOTICE 'another_func(%,%)',m[1], m[2];
   END LOOP;
END
$do$

Solution pour les anciennes versions :

DO
$do$
DECLARE
   arr varchar[] := '{{key1,val1},{key2,val2}}';
BEGIN
   FOR i IN array_lower(arr, 1) .. array_upper(arr, 1)
   LOOP
      RAISE NOTICE 'another_func(%,%)',arr[i][1], arr[i][2];
   END LOOP;
END
$do$

De plus, il n'y a pas de différence entre varchar[] et varchar[][] pour le système de type PostgreSQL. Je vous explique plus en détail ici.

Le DO requiert au moins PostgreSQL 9.0 et LANGUAGE plpgsql est la valeur par défaut (vous pouvez donc omettre la déclaration).