El 04/07/2011 16:45, Lazaro Rubén García Martinez escribió:
Hola a todos en la lista, necesito realizar un procedimiento en el que pase un 
arreglo (algo como tipo de clave , valor) cuyos datos los necesito insertar en 
una tabla.
El arreglo tendría la siguiente estructura

{{1, "valor1"},{2, "valor2"}}.

Como el arreglo contiene columnas donde primeramente hay un dato de tipo entero 
seguido de un varchar cree un tipo de dato para almacenar el arreglo, pero 
sinceramente no doy con lo que necesito hacer.

Alguien me pudiera decir de que forma pudiera recorrer el arreglo y poder 
seleccionar cada valor para poder trabajar con estos.

Mas o menos la idea del procedimiento es la siguiente:

El tipo de dato es este:
CREATE TYPE public.dato_compuesto AS (
   a INTEGER,
   b VARCHAR(20)
);

Este es el procedimiento:

CREATE OR REPLACE FUNCTION public.function1 ( datos public.dato_compuesto) 
RETURNS pg_catalog.void AS
$body$
DECLARE
        size integer := array_length(datos);
BEGIN
        for i IN 1..size
     Loop
        INSERT INTO my_table
         (
           clave,
           valor
         )
         VALUES (
           datos[i][1],
           datos[i][2]
       );
     END Loop;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
COST 100;

La llamada la realizo de la siguiente forma:

SELECT * FROM public.function1('{1,"Mi valor"}');

Y el error que me da es este:

ERROR:  literal de record no es válido: «{1,"Mi valor"}»

saludos y muchas gracias por su tiempo.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
mira a aver si tienes algun problema con la comillas dobles al pasarle los parametros a la funcion ponle comillas simples con caracteres de escape.
saludos
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a