Anthony muchas gracias por tu respuesta. Saludos. ________________________________________ De: Anthony [asotolo...@uci.cu] Enviado el: lunes, 04 de julio de 2011 16:31 Para: Lazaro Rubén García Martinez CC: pgsql-es-ayuda@postgresql.org Asunto: Re: [pgsql-es-ayuda] Consulta utilizando Arrays.
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