From: | Marcos Ortiz <mlortiz(at)uci(dot)cu> |
---|---|
To: | Sergio Villalba Moreno <svillalba(at)cherrytel(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Función SQL/PL en versión 7.4 |
Date: | 2011-04-05 18:43:41 |
Message-ID: | 1302029021.6938.10.camel@marcosluis-Aspire-5251 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Tue, 2011-04-05 at 18:28 +0200, Sergio Villalba Moreno wrote:
> La consulta es esta:
>
> SELECT sum(round("numeric"(float8(detalle_facturas.cantidad) *
> (detalle_facturas.precio_unidad - detalle_facturas.precio_unidad *
> detalle_facturas.porc_descuento / 100::double precision) *
> (detalle_facturas.porc_comision / 100::double precision)), 2)) AS
> total FROM facturas, contratos, detalle_facturas, agentes WHERE
> facturas.c_contrato = contratos.clave AND facturas.clave =
> detalle_facturas.c_factura AND contratos.c_agente = agentes.clave AND
> contratos.b_baja = false AND contratos.clave=1928
>
> CREATE FUNCTION precioTotalFactura(integer) RETURNS text AS '
>
> DECLARE
>
>
>
> -- Declare aliases for user input.
>
> id ALIAS FOR $1;
>
>
>
> -- Declare variables to hold the customer name.
>
>
>
> f_precio_unidad int;
>
> f_porc_descuento int;
>
> f_cantidad int;
>
> f_porc_comision int;
>
> f_total int;
>
>
>
> BEGIN
>
> SELECT INTO f_porc_comision, f_precio_unidad, f_porc_descuento,
> f_cantidad, f_porc_comision
>
> detalle_facturas.porc_comision,
> detalle_facturas.precio_unidad, detalle_facturas.porc_descuento,
> detalle_facturas.cantidad
>
> FROM facturas, contratos, detalle_facturas, agentes
>
> WHERE facturas.c_contrato = contratos.clave AND
> facturas.clave = detalle_facturas.c_factura AND contratos.c_agente =
> agentes.clave AND contratos.b_baja = false AND contratos.clave = id;
>
>
>
> --calculamos el total
>
>
>
> f_total = (f_cantidad * f_precio_unidad) * (f_porc_comision / 100);
>
>
>
> -- Return the name.
>
>
>
> RETURN id || '':'' || f_total;
>
>
>
> END
>
> ' LANGUAGE 'plpgsql';
>
>
>
>
>
> Alguien me puede dar alguna idea, gracias.
>
> Gracias, saludos.
¿Cuál es el error que te da?
La primera recomendación que debo hacerte es que si puedes, migres a una
versión más reciente (de ser posible a la versión 9.0.3 o superior). Ya
esa versión según tengo entendido perdió el soporte por la comunidad,
además de que vas a obtener disímiles ventajas sobre ello.
Lo otro que veo es que ¿Por qué si lo que quieres devolver es un entero,
pones en el valor de retorno TEXT?
Y por último, la consulta que pones de primera intención no es la misma
que la que pones en el procedimiento.
En todo caso deberías ver cuáles serían los tipos de datos más adecuados
para las variables f_precio_unidad, f_porc_descuento, f_cantidad,
f_porc_comision y f_total
Saludos
--
Marcos Luís Ortíz Valmaseda
Software Engineer
Centro de Tecnologías de Gestión de Datos (DATEC)
Universidad de las Ciencias Informáticas
http://uncubanitolinuxero.blogspot.com
http://www.linkedin.com/in/marcosluis2186
From | Date | Subject | |
---|---|---|---|
Next Message | Eduardo Arenas C | 2011-04-05 19:04:10 | Re: Es esto cierto ???? |
Previous Message | Ariel Centeno | 2011-04-05 17:30:11 | vacuum |