Re: Array de Objects en una funcion

From: "Ivan Perales M(dot)" <ivan(dot)perales(at)gmail(dot)com>
To: anthony <asotolongo(at)uci(dot)cu>
Cc: Ayuda Esp PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Array de Objects en una funcion
Date: 2014-09-12 19:17:47
Message-ID: CAHMuS05WkDH8mhquQUVc-UtBGA19sfkjtmb2VE2_Svea=kVz1g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Si por ese camino me fui, solo que no logro llegar al resultado que deseo.

--creo el composite type:
create type imp_decimal_type as (impuesto text, valor numeric(16,6));

--El query que ejecuto seria algo asi:
select e.*, imp_funcion(e.id) from factura e...

factura tiene al menos 20 campos, entonces lo que necesito es que
imp_funcion me retorne un array de mi composite type, para eso creo la
funcion:
CREATE OR REPLACE FUNCTION imp_decimal_ingreso(integer) RETURNS
imp_decimal_type[] AS
'SELECT array_agg(ROW(nombreUnico, valor)::imp_decimal_type) from
impuestoingreso where ingreso_id = $1'
LANGUAGE SQL;

Esto funciona bien, si yo ejecuto imp_decimal_ingreso(1), me devuelve lo
sig:
"{"(\"IVA 16\",540.690000)","(\"IEPS 2\",50.000000)"}"

Donde segun entiendo, me esta devolviendo un array con dos elementos, y
cada elemento es una varchar separado por coma, no es como yo esperaba que
cada elemento fuera en si un array con un varchar y un decimal.

Ahora viene la peor parte. Este query lo estoy ejecutando desde una
aplicacion java con el driver jdbc41 de postgres y pues no esta soportado
la obtención de arrays =(.
El que me devuelva un array de strings no habria tanto problema, interpreto
el resultado y genero los objetos en java, pero el que no los pueda accesar
con el driver si es una bronca. Orita por lo pronto voy a ver si puedo
realizar una parche al driver para accesar al array.

Saludos

2014-09-12 13:56 GMT-05:00 anthony <asotolongo(at)uci(dot)cu>:

> Hola Ivan, si entendí bien lo que vas a devolver siempre es (impuesto,
> valor)
> entonces pudieras crear un tipo de dato para esa función:
> create type tu_tipo as (impuesto character varying, valor double))
>
> y luego defines tu_funcion de ese tipo o un arreglo de ese tipo.
>
>
> saludos
>
> El 11/09/14 a las #4, Ivan Perales M. escribió:
>
> Hola buenas noches.
>>
>> Estoy batallando con un escenario. Estoy migrando una base de datos de H2
>> database a postgresql ya que en algunas ocasiones falla por razones que no
>> he podido debugear y como el tiempo es oro decidi a cambiar de base.
>>
>> Todo muy bien excepto por una funcion que escribi, la cual hace lo
>> siguiente:
>>
>> Tengo una tabla con facturas, y cada factura tiene diferentes impuestos.
>> Así una factura puede no tener impuestos, otras pueden tener 1 o 2 o 3 o N
>> impuestos.
>>
>> Entonces tengo una tabla con impuestos y tengo otra tabla intermedia
>> donde relaciono la factura con sus impuestos. Como las facturas las muestro
>> en un paginador, hago un query como:
>>
>> select *, myfuncion('select impuesto, valor from tabla_intermedia where
>> fac_id =' || id) from factura...
>>
>> myfuncion se encarga de ejecuta el query que indico, el cual como ven
>> retorna dos valores por cada impuesto, la clave del impuesto y el valor del
>> mismo. La funcion creada en h2 database se encarga de crear un array y
>> retornarlo. Por ejemplo si una factura tiene 2 impuestos: el valor
>> resultante seria: {'impuesto1', 1243.23, 'Impuesto2', 543.43}. Este
>> resultado lo proceso y lo muestra en una tabla.
>>
>> Estoy tratando de crear esta misma funcionalidad en plpgsql, del cual soy
>> completamente nuevo. Estube leyendo algo pero me surgio la siguiente duda:
>> al crear la funcion necesito declarar el tipo de dato a regresar, pero
>> seria un tipo de dato object por que van valores alfabeticos y numericos, y
>> no encontre como poder usar este tipo de dato. Alguien de ustedes sabe como
>> declarar el valor de retorno en la funcion? y aventurarme un poco mas,
>> retornar un array bidimensional algo como:
>> {{'Impuesto1', 1243.23}
>> {'Impuesto2', 543.43}}
>>
>> No importa mucho la manera en que se retorne, puedo actualizar la
>> aplicacion, lo importante es que obtenga la información.
>>
>> Saludos y gracias por su tiempo
>>
>> --
>> Lindolfo Iván Perales Mancinas
>> Solo existen 10 tipos de personas en el mundo, las que saben binario y
>> las que no.
>>
>
> Concurso "Mi selfie por los 5". Detalles en http://justiciaparaloscinco.
> wordpress.com
>

--
Lindolfo Iván Perales Mancinas
Solo existen 10 tipos de personas en el mundo, las que saben binario y las
que no.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Emanuel Calvo 2014-09-14 20:45:45 Re: Array de Objects en una funcion
Previous Message anthony 2014-09-12 18:56:10 Re: Array de Objects en una funcion