Hi all.
I wrote a function and it does not work properly.
What am I doing wrong?
*- Here is the script .
---
CREATE OR REPLACE FUNCTION
"public"."cxp_balfactura" (x_codcia char, x_suplidor char, x_factura char,
x_monto numeric, x_moneda integer) RETURNS numeric
AS
$body$ DECLARE cursor1 record; debitos numeric(14,2); creditos numeric(14,2); balance numeric (14,2); BEGIN balance := x_monto; --It doesn't execute this lines, why?
for cursor1
in select cxp_mov_item.tipo_transaccion,sum(item_monto+item_descuento) AS
monto
from cxp_mov_item,cxp_mov_head where cxp_mov_item.cia_codigo = cxp_mov_head.cia_codigo and cxp_mov_item.mov_codigo = cxp_mov_head.mov_codigo and cxp_mov_item.fact_codigo = x_factura and cxp_mov_head.cia_codigo = x_codcia and cxp_mov_head.supl_codigo = x_suplidor and cxp_mov_head.id_moneda = x_moneda and cxp_mov_head.mov_estado <> '*' GROUP by cxp_mov_item.tipo_transaccion loop if cursor1.tipo_transaccion = 'ND' then debitos := debitos + cursor1.monto; end if; if
cursor1.tipo_transaccion = 'CK'
then
creditos := creditos + cursor1.monto; end if; if
cursor1.tipo_transaccion = 'NC'
then
creditos := creditos + cursor1.monto; end if; end loop; if balance is null
then
balance:=0; end if; if creditos is null
then
creditos := 0; end if; if debitos is null
then
debitos := 0; end if; balance := balance
+ creditos - debitos;
update cxp_facturas
set fact_balance = balance
where cia_codigo = x_codcia and fact_tipo = substr(x_factura,1,2) and fact_codigo = substr(x_factura,3) and supl_codigo = x_suplidor; return balance;
END; $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; --
Thanks in advance.
|