以下が機能するはずです:
SELECT to_number(:x,
translate(:x, '012345678-+', '999999999SS'),
'nls_numeric_characters=''.,''')
FROM dual;
正しい2番目の引数999.999999
を作成します 効率的なtranslate
したがって、事前に何桁あるかを知る必要はありません。サポートされているすべてのOracle数値形式で機能します(10.2.0.3では明らかに最大62桁の有効数字)。
興味深いことに、非常に大きな文字列がある場合は、単純なto_number(:x)
この方法は失敗しますが、機能します。
編集:sOliverのおかげで負の数をサポートします。