SELECT
DECODE(
DECODE(LENGTH (SUBSTR(VAL1,DECODE(INSTR(VAL1,'.',1,1),0,LENGTH(VAL1)+1,INSTR(VAL1,'.',1,1)+1)) ),
NULL,0,LENGTH (SUBSTR(VAL1,DECODE(INSTR(VAL1,'.',1,1),0,LENGTH(VAL1)+1,INSTR(VAL1,'.',1,1)+1)) )),0,TO_CHAR(VAL1,999999999.99),
DECODE(
DECODE(LENGTH (SUBSTR(VAL1,DECODE(INSTR(VAL1,'.',1,1),0,LENGTH(VAL1)+1,INSTR(VAL1,'.',1,1)+1)) ),
NULL,0,LENGTH (SUBSTR(VAL1,DECODE(INSTR(VAL1,'.',1,1),0,LENGTH(VAL1)+1,INSTR(VAL1,'.',1,1)+1)) )),1,TO_CHAR(VAL1,999999999.99),
DECODE(
DECODE(LENGTH (SUBSTR(VAL1,DECODE(INSTR(VAL1,'.',1,1),0,LENGTH(VAL1)+1,INSTR(VAL1,'.',1,1)+1)) ),
NULL,0,LENGTH (SUBSTR(VAL1,DECODE(INSTR(VAL1,'.',1,1),0,LENGTH(VAL1)+1,INSTR(VAL1,'.',1,1)+1)) )),2,TO_CHAR(VAL1,999999999.99),
DECODE(
DECODE(LENGTH (SUBSTR(VAL1,DECODE(INSTR(VAL1,'.',1,1),0,LENGTH(VAL1)+1,INSTR(VAL1,'.',1,1)+1)) ),
NULL,0,LENGTH (SUBSTR(VAL1,DECODE(INSTR(VAL1,'.',1,1),0,LENGTH(VAL1)+1,INSTR(VAL1,'.',1,1)+1)) )),3,TO_CHAR(VAL1,999999999.999),
TO_CHAR(VAL1,999999999.9999)
)
)
)
) VALUE
from (select 100.123565 as val1 from dual);
-------------------------------------------------------------------------------
select TRIM(DECODE(instr(:LINE_QTY_INVOICED,'.',1,1),0,TO_CHAR(round(:LINE_QTY_INVOICED,2),'999G999G999G999D00'),
decode(length(substr(:LINE_QTY_INVOICED,instr(:LINE_QTY_INVOICED,'.',1,1)+1)),1,
TO_CHAR(round(:LINE_QTY_INVOICED,2),'999G999G999G999D00'),2,
TO_CHAR(round(:LINE_QTY_INVOICED,2),'999G999G999G999D00'),3,
TO_CHAR(:LINE_QTY_INVOICED,'999G999G999G999D000'),
TO_CHAR(round(:LINE_QTY_INVOICED,4),'999G999G999G999D0000')
)
)
)
INTO l_val from dual;