Edwinsp
Mira lo que he probado.
Código sql:
Ver original-- Function: pa_grabardetalle(_codcab bpchar, _codigo bpchar[], _aimporte real[])
-- DROP FUNCTION pa_grabardetalle(_codcab bpchar, _codigo bpchar[], _aimporte real[]);
CREATE OR REPLACE FUNCTION pa_grabardetalle(_codcab bpchar, _codigo bpchar[], _aimporte REAL[])
RETURNS REAL AS
$BODY$
BEGIN
FOR i IN array_lower(_aimporte,1) .. array_upper(_aimporte,1) LOOP
INSERT INTO detalle(codcab,codigo,importe1,importe2)
VALUES(_codcab,_codigo[i],_aimporte[i][1],_aimporte[i][2]);
END LOOP;
IF (SELECT SUM(importe1)-SUM(importe2) FROM detalle WHERE codcab=_codcab)<>0 THEN
--RAISE EXCEPTION 'las sumas no coinciden..!';
RETURN (SELECT SUM(importe1)-SUM(importe2) FROM detalle WHERE codcab=_codcab)::REAL;
END IF;
RETURN 1;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Esto me retorna el valor que deberia ser 0. Para mi sorpresa el valor el valor retornado es muy cercano a 0.
Lo extraño realmente, es que si te fijas en la tabla detalle, las inserciones se hacen correctamente.
Sigo buscando la razón de este fenomeno.