RE: [pgsql-es-ayuda] Función SQL/PL en versión 7.4

From: "Sergio Villalba Moreno" <svillalba(at)cherrytel(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: [pgsql-es-ayuda] Función SQL/PL en versión 7.4
Date: 2011-04-11 16:45:17
Message-ID: 0C8D9067349E415991A3E3AF81100069@tecnico2
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias por tu respuesta y perdona la tardanza...

La opción de actualizar no es posible, el servidor está en producción.
Tendría que montar un escenario de prueba para probar la actualización y ver
que todo funciona correctamente....

La creación de funciones PL/SQL es algo nuevo para mí, así que he probado a
crear este procedimiento almacenado que retorna un valor tipo texto para
probar el funcionamiento. Yo normalmente trabajo con SQL o vistas, los
funciones PL/SQL la he tratado poco. En concreto anoche me estuve
documentando un poco a través de esta Web
(http://postgresql.uci.cu/node/109)

Mi idea era tratar esta vista en un proceso almacenado pasando un paramento,
la vista en concreto es esta:

SELECT contratos.c_agente, agentes.fecha_fin_liquid, facturas.fecha_factura
AS fecha, 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
GROUP BY contratos.c_agente, facturas.fecha_factura,
agentes.fecha_fin_liquid;

¿Es posible crear el procedimiento con una vista de este tipo?

Gracias Marcas.

Saludos.

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Marcos Ortiz
Enviado el: martes, 05 de abril de 2011 20:44
Para: Sergio Villalba Moreno
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Función SQL/PL en versión 7.4

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

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Miguel Angel Hernandez Moreno 2011-04-11 18:18:07 Re: comparar dos bases de datos
Previous Message Alejandro Brust at federacion 2011-04-11 16:43:57 vacuumdb excluir tablas