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