Bucle sobre las dimensiones de la matriz en plpgsql

En plpgsql, quiero obtener el contenido de la matriz de uno en uno a partir de una matriz de dos dimensiones.

DECLARE
  m varchar[];
  arr varchar[][] := array[['key1','val1'],['key2','val2']];
BEGIN
  for m in select arr
  LOOP
    raise NOTICE '%',m;
  END LOOP;
END;

Pero el código anterior devuelve:

{{key1,val1},{key2,val2}}

en una línea. Quiero ser capaz de recorrer y llamar a otra función que toma como parámetros:

another_func(key1,val1)
InformationsquelleAutor Harpreet | 2012-03-20

1 Kommentar

  1. 98

    Desde PostgreSQL 9.1 no es el conveniente 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$

    Solución para versiones anteriores:

    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$

    También, no hay ninguna diferencia entre varchar[] y varchar[][] para el PostgreSQL tipo de sistema. Voy a explicar en más detalle aquí.

    La DO declaración requiere al menos PostgreSQL 9.0, y LANGUAGE plpgsql es el valor predeterminado (así que usted puede omitir la declaración).

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea