Folgendes sollte funktionieren:
SELECT to_number(:x,
translate(:x, '012345678-+', '999999999SS'),
'nls_numeric_characters=''.,''')
FROM dual;
Es wird das korrekte zweite Argument 999.999999
erstellen mit dem effizienten translate
Sie müssen also nicht vorher wissen, wie viele Ziffern es sind. Es funktioniert mit allen unterstützten Oracle-Zahlenformaten (bis zu 62 signifikante Ziffern anscheinend in 10.2.0.3).
Interessanterweise, wenn Sie einen wirklich großen String haben, das einfache to_number(:x)
funktioniert, während diese Methode fehlschlagen wird.
Bearbeiten:Unterstützung für negative Zahlen dank sOliver.