Mělo by fungovat následující:
SELECT to_number(:x,
translate(:x, '012345678-+', '999999999SS'),
'nls_numeric_characters=''.,''')
FROM dual;
Vytvoří správný druhý argument 999.999999
s efektivním translate
takže nemusíte předem vědět, kolik číslic tam je. Bude fungovat se všemi podporovanými formáty čísel Oracle (až 62 platných číslic zjevně v 10.2.0.3).
Je zajímavé, že pokud máte opravdu velký řetězec, jednoduchý to_number(:x)
bude fungovat, zatímco tato metoda selže.
Edit:podpora záporných čísel díky sOliver.