Простой пример, который проверяет, есть ли десятичные дроби. Если это так, они пишутся отдельно.
SQL> with test (col) as
2 (select 4432 from dual union all
3 select 515.24 from dual
4 ),
5 inter as
6 (select col,
7 regexp_substr(col, '^\d+') fir,
8 case when col <> round(col) then regexp_substr(col, '\d+$') end sec
9 from test
10 )
11 select col,
12 to_char(to_date(fir, 'J'), 'JSP') ||
13 case when sec is not null then ' and ' || to_char(to_date(sec, 'J'), 'JSP') ||' cents' end spell
14 from inter;
COL SPELL
---------- --------------------------------------------------
4432 FOUR THOUSAND FOUR HUNDRED THIRTY-TWO
515,24 FIVE HUNDRED FIFTEEN and TWENTY-FOUR cents
SQL>