Consulta utilizando Arrays.

From: Lazaro Rubén García Martinez <lgarciam(at)vnz(dot)uci(dot)cu>
To: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Consulta utilizando Arrays.
Date: 2011-07-04 20:45:34
Message-ID: 294D3D02D5E18D42827B2ECFEADEB6881387432F2C@mx-interno.vnz.uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Marcos Ortiz 2011-07-04 20:48:49 Re: procesos ocupan el total de la RAM
Previous Message Jaime Casanova 2011-07-04 20:32:11 Re: procesos ocupan el total de la RAM