¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Función para Redondear Precio Neto en SQLSCRIPT con Ejemplos y Explicación detallada

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 6 Vistas
0
Cargando...

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;

cual es el error

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

2 Respuestas

0
Cargando...

Jonathan,

Deberías declarar tus variables después del AS y antes del BEGIN.

myVariable DATATYPE := DEFAULT_VALUE;

Mi pregunta para ti sería, ¿cuál es el error que tiene tu código? Veo que tienes código comentado y posiblemente una sintaxis incorrecta.

¿Tienes alguna pregunta específica sobre tu SQLScript? ¿O solo quieres saber dónde está el error? No entendí tu pregunta al 100%.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Jonathan,

Deberías declarar tus variables después del AS y antes del BEGIN

myVariable DATATYPE := DEFAULT_VALUE;

Mi pregunta para ti sería, ¿cuál es el error que tiene tu código? Veo que tienes código comentado, así como posiblemente una sintaxis incorrecta.

¿Tienes alguna pregunta específica sobre tu SQLScript? ¿O solo quieres saber dónde está el error? No entendí tu pregunta al 100%.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?