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;