CREATE FUNCTION SyS_FU_RedondearPrecioNeto
(
nPrecioNeto DECIMAL(19,6),
vAlmacen VARCHAR(3) ,
cRedondeo char(3)
)
--returns Precio decimal(16,6) LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS
RETURNS TABLE (Precio DECIMAL (19,6)) LANGUAGE SQLSCRIPT AS
BEGIN
DECLARE nResiduo DECIMAL (19,6);
DECLARE nFactor DECIMAL(19,6);
Declare cRedon Char(3);
DECLARE nPrecioNeto DECIMAL(19,6);
declare temp1 DECIMAL(19,6);
declare temp2 DECIMAL(19,6);
declare Precio DECIMAL(19,6);
nFactor := 5 ;
IF (:cRedondeo = 'C') then
SELECT A."U_SYS_TICE" INTO cRedondeo FROM "@SYS_PSUCURSALES" A WHERE A."U_SYS_ALMG" = vAlmacen ;
/*Si el redondeo es hacia arriba*/
IF (:cRedon = 'A') then
-- nResiduo := :nPrecioNeto % 10 ;
select (:nPrecioNeto / 10) into temp1 from dummy;
select (Cast(:temp1 as INT)*10) into temp2 from dummy;
select(:nPrecioNeto-temp2) into nResiduo from dummy;
/*Si el residuo es mayor a 1 se redondea hacia arriba*/
IF (:nResiduo > 1) then
select ((:nPrecioNeto - :nResiduo) + 10) into Precio from dummy ;
/*Si no se hace hacia abajo*/
Else
select (:nPrecioNeto - :nResiduo)into Precio from dummy ;
End IF ;
ELSE
--nResiduo := :nPrecioNeto / 10 ;
select (:nPrecioNeto / 10) into temp1 from dummy;
select (Cast(:temp1 as INT)*10) into temp2 from dummy;
select(:nPrecioNeto-temp2) into nResiduo from dummy;
/*Si el residuo es mayor a 1 se redondea hacia arriba*/
IF (:nResiduo > :nFactor) THEN
select ((:nPrecioNeto - :nResiduo) + 10) into Precio from dummy ;
/*Si no se hace hacia abajo*/
Else
select (:nPrecioNeto - :nResiduo)into Precio from dummy ;
End IF;
End IF;
/*En caso de que el tipo de redondeo sea a 5*/
end if;
IF (:cRedondeo = 'Y') then
--temp1:=(();
select nPrecioNeto/5 into temp1 from dummy;
select (Cast(:temp1 as INT)*10) into temp2 from dummy;
--temp2:=(10*5)
select(:nPrecioNeto-temp2) into nResiduo from dummy;
-- nResiduo:=((select nPrecioNeto from dummy)-temp2) ;
IF (:nResiduo >= 2.5) then
select ((:nPrecioNeto - :nResiduo) + 10) into Precio from dummy ;
--Precio :=((:nPrecioNeto - :nResiduo) + :nFactor);
/*Si no se hace hacia abajo*/
Else
select (:nPrecioNeto - :nResiduo)into Precio from dummy ;
-- Precio :=(:nPrecioNeto - :nResiduo);
End IF;
/*Si no se hace hacia abajo*/
end if;
IF (cRedondeo = 'N') then
--Precio := nPrecioNeto;
select nPrecioNeto into Precio from dummy;
END IF;
RETURN SELECT Precio FROM dummy;
--return Precio;
end;
qual é o erro