Re: Función SQL/PL en versión 7.4

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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