Re: Como utilizar un array dinámico en función plpgsql

From: Carlos Bazán <infobaz(at)vtr(dot)net>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Como utilizar un array dinámico en función plpgsql
Date: 2009-04-01 17:47:47
Message-ID: 200904011347.48435.infobaz@vtr.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Yo lo acabo de hacer así:

DECLARE
mi_arreglo TEXT[] := '{}';
BEGIN
...
...
-- y lo alimento con
mi_arreglo := mi_arreglo || ARRAY[[rec.dato1::text, rec.dato2::text]];
...
etc.
Obviamente hay que preocuparse de los tipos de datos (entero, texto etc.)
dependiendo del tipo de arreglo.

Saludos
Carlos Bazán

El Wednesday 01 April 2009 13:08:28 Conxita Marín escribió:
> Gracias por tu solución, el problema és que el código del resto de la
> función es bastante complejo y ya està escrito en plpgsql.
> Esperaré aun poco a ver si alguien me da otra solución simple en plpgsql,
> sino tiraré de tablas temporales para implementar el vector.
>
> Un saludo.
>
> Conxita Marín
> Desarrollos Informáticos Modulares de Software, S.L.
> www.dims.com
>
> ----- Original Message -----
> From: "Emanuel Calvo Franco" <postgres(dot)arg(at)gmail(dot)com>
> To: "Conxita Marín" <cmarin(at)dims(dot)com>
> Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
> Sent: Wednesday, April 01, 2009 5:17 PM
> Subject: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Como utilizar un array
> dinámico en función plpgsql
>
> El día 1 de abril de 2009 4:29, Conxita Marín <cmarin(at)dims(dot)com> escribió:
> > Buenas.
> >
> > Necesitaria utilizar un array de 2 dimensiones que puede tener de 1 a 999
> > elementos.
> >
> > Algo así:
> >
> > DROP FUNCTION pepe (integer);
> > CREATE FUNCTION pepe(tamano integer) RETURNS integer
> > AS $_$
> > declare
> > matriz integer[][];
> > i integer;
> > BEGIN
> > for i in 1..tamano loop
> > matriz[i][1] = 1;
> > matriz[i][2] = 2;
> > end loop;
> > return 0;
> > END;
> > $_$
> > LANGUAGE plpgsql;
>
> No se si te sirve, lo hice con plperl.
>
> CREATE OR REPLACE FUNCTION matriz(integer) returns integer language
> 'plperl' as $_$
> $array = ();
> my $numero = 0;
> for ($numero;$numero < $_[0]; $numero++){
> $array[$numero][1] = 1;
> $array[$numero][2] = 2;
> }
> return 0;
> $_$;
>
> > Al intentar rellenar el array sale este error:
> >
> > select pepe(10);
> > ERROR: invalid array subscripts
> > CONTEXT: PL/pgSQL function "pepe" line 7 at assignment
> > Buscando en los foros, parece ser que hay que inicializar el array en la
> > declaración, és así?, si así es, ¿hay alguna manera de inicializar sin
> > tener
> > que declarar todos los elementos?
> >
> > Saludos.
> >
> > Conxita Marín
> > Desarrollos Informáticos Modulares de Software, S.L.
> > www.dims.com

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Emanuel Calvo Franco 2009-04-01 17:55:03 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Como utilizar un array dinámico en función plpgsql
Previous Message Miguel Angel 2009-04-01 17:37:06 Re: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Como utilizar un array dinámico en función plpgsql