Het volgende zou moeten werken:
SELECT to_number(:x,
translate(:x, '012345678-+', '999999999SS'),
'nls_numeric_characters=''.,''')
FROM dual;
Het zal het juiste tweede argument bouwen 999.999999
met de efficiënte translate
u hoeft dus niet vooraf te weten hoeveel cijfers er zijn. Het werkt met alle ondersteunde Oracle-nummerformaten (tot 62 significante cijfers blijkbaar in 10.2.0.3).
Interessant is dat als je een hele grote string hebt, de simpele to_number(:x)
zal werken, terwijl deze methode zal mislukken.
Bewerken:ondersteuning voor negatieve getallen dankzij sOliver.