Gracias a todos por su ayuda.
Inicialice las variables debito y credito, y cambie los tipos de datos. La funcion quedo como se puede apreciar aqui.

CREATE OR REPLACE FUNCTION "public"."cxp_balfactura" (x_codcia varchar, x_suplidor varchar, x_factura varchar, x_moneda integer, x_monto numeric) RETURNS numeric AS
$body$
DECLARE
      cursor1  record;
      debitos  numeric(14,2);
      creditos numeric(14,2);
      balance  numeric (14,2);
BEGIN
      balance := x_monto;
      creditos := 0;
      debitos :=0;
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_head.cia_codigo = x_codcia
              and   cxp_mov_head.supl_codigo = x_suplidor
              and   cxp_mov_item.fact_codigo = x_factura
              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' or cursor1.tipo_transaccion = 'CK' then
             debitos := debitos + cursor1.monto;
         end if;

         if cursor1.tipo_transaccion = 'NC' then
             creditos := creditos + cursor1.monto;
         end if;
     end loop;

/*Actualizando el balance de las facturas*/
     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;
--
TIP 5: ¿Has leído nuestro extenso FAQ?
        http://www.postgresql.org/docs/faqs.FAQ.html

Responder a