Berikut ini akan berfungsi:
SELECT to_number(:x,
translate(:x, '012345678-+', '999999999SS'),
'nls_numeric_characters=''.,''')
FROM dual;
Ini akan membangun argumen kedua yang benar 999.999999
dengan translate
yang efisien jadi Anda tidak perlu tahu berapa banyak angka yang ada sebelumnya. Ini akan bekerja dengan semua format angka Oracle yang didukung (hingga 62 digit signifikan tampaknya dalam 10.2.0.3).
Menariknya, jika Anda memiliki string yang sangat besar to_number(:x)
akan bekerja sedangkan metode ini akan gagal.
Sunting:dukungan untuk angka negatif berkat sOliver.