Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

matrices en postgres

Estas en el tema de matrices en postgres en el foro de PostgreSQL en Foros del Web. Hola a todos, podrian por favor ayudarme estoy tratando de hacer inserciones a una tabla usando array, ya lo probe cuando se trata de un ...
  #1 (permalink)  
Antiguo 06/10/2008, 10:23
 
Fecha de Ingreso: septiembre-2008
Mensajes: 75
Antigüedad: 15 años, 8 meses
Puntos: 1
matrices en postgres

Hola a todos, podrian por favor ayudarme estoy tratando de hacer inserciones a una tabla usando array, ya lo probe cuando se trata de un campo pero en la mayoria de casos sera mas de uno, en este caso ya seria una matriz, pero no se como definirla e implementarla
les muestro mi funcion
CREATE OR REPLACE FUNCTION "public"."pa_GrabarFact" (xnumero varchar, xcliente varchar, xtotal numeric, xdetalle integer []) RETURNS integer AS
$body$
BEGIN
insert into public."Cabecera"(numero,cliente,total)
values(xnumero,xcliente,xtotal);
FOR i IN array_lower(xdetalle,1) .. array_upper(xdetalle,1) LOOP
INSERT INTO public."Detalle"(numero,item)
VALUES(xnumero, xdetalle[i]);
END LOOP;
RETURN 1;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;

y la invoco con:
select "public"."pa_GrabarFact"('0000003','10167201534',5 0,ARRAY[1,2,3]) as resultado;

me funciona muy bien, pero necesita enviar mas de un campo

gracias
  #2 (permalink)  
Antiguo 07/10/2008, 01:21
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: matrices en postgres

Cita:
Iniciado por edwinsp Ver Mensaje
me funciona muy bien, pero necesita enviar mas de un campo
gracias
No entiendo a que te refieres con "más de un campo", puedes poner un ejemplo de que quieres hacer?

Salu2
  #3 (permalink)  
Antiguo 07/10/2008, 10:14
 
Fecha de Ingreso: septiembre-2008
Mensajes: 75
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: matrices en postgres

Me explico mejor...

En la funcion q muestro hay una insercion q hago recorriendo un array unidimensional(xdetalle[]), el cual paso como parametro:
FOR i IN array_lower(xdetalle,1) .. array_upper(xdetalle,1) LOOP
INSERT INTO public."Detalle"(numero,item)
VALUES(xnumero, xdetalle[i]);
END LOOP;

pero que pasaria si mi tabla detalle tuviera los siguientes campos:
numero,item,cantidad,punit

entonces mi array ya no tendria q ser unidimensional, seria una matriz y en muchos de los casos una matriz que contenga diferentes tipos de datos

espero haberme explicado mejor, gracias por la atencion brindada

atte
  #4 (permalink)  
Antiguo 08/10/2008, 01:26
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: matrices en postgres

Creo que no se pueden crear arrays con distintos tipos de datos en postgres.

Salu2
  #5 (permalink)  
Antiguo 11/10/2008, 08:20
 
Fecha de Ingreso: septiembre-2008
Mensajes: 75
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: matrices en postgres

En el caso que sea una matriz como ejecutaria la funcion

CREATE OR REPLACE FUNCTION "public"."pa_GrabarFact" (xnumero varchar, xcliente varchar, xtotal numeric, xdetalle real[][]) RETURNS integer AS
$body$
BEGIN
insert into public."Cabecera"(numero,cliente,total)
values(xnumero,xcliente,xtotal);
FOR i IN array_lower(xdetalle,1) .. array_upper(xdetalle,1) LOOP
INSERT INTO public."Detalle"(numero,item,cantidad,punit)
VALUES(xnumero,1, xdetalle[i][1],xdetalle[i][2]);
END LOOP;
RETURN 1;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;


quiero hacerlo asi pero me salen errores:
select "public"."pa_GrabarFact"('0000003','10167201534',5 0,ARRAY[1.0,10.0],[2.0,20.0] as resultado;

gracias
  #6 (permalink)  
Antiguo 13/10/2008, 06:25
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: matrices en postgres

revista los parametros que mandas al llamar a la función, no coinciden con la definicion.

Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:27.