Powinny działać:
SELECT to_number(:x,
translate(:x, '012345678-+', '999999999SS'),
'nls_numeric_characters=''.,''')
FROM dual;
Zbuduje poprawny drugi argument 999.999999
z wydajnym translate
więc nie musisz wcześniej wiedzieć, ile jest cyfr. Będzie działać ze wszystkimi obsługiwanymi formatami liczb Oracle (do 62 cyfr znaczących najwyraźniej w 10.2.0.3).
Co ciekawe, jeśli masz naprawdę duży ciąg, prosty to_number(:x)
zadziała, podczas gdy ta metoda zawiedzie.
Edycja:obsługa liczb ujemnych dzięki sOliver.