如何使用带有固定小数点char的TO_NUMBER函数在Oracle中从字符串转换为数字?

Tom*_*Tom 7 oracle plsql oracle10g number-formatting

我需要将过程转换stringdecimal固定小数分隔符,.独立于文化设置.接下来,我知道十进制数仅限于6位小数,.并且之前的位数没有限制..使用Oracle文档及其格式字符串示例我现在只有这个解决方案:

v_number := TO_NUMBER(v_string, '9999999999999999999999999999999999D999999', 'NLS_NUMERIC_CHARACTERS = ''. ''');
Run Code Online (Sandbox Code Playgroud)

9之前的字符D数是允许的最大数量.我发现这个格式字符串非常糟糕.是否有更好的格式字符串用于此常规转换或某种方式省略第二个函数参数?一般来说,我只需要传递给函数NLS参数告诉它我只想用小数分隔符转换.,但在这种情况下第二个参数也是强制性的.

Vin*_*rat 8

您不能to_number使用第三个参数而不是第二个参数调用该函数.我建议将"丑陋"的格式字符串放在一个包中,然后忘记它.

您还可以使用dbms_session.set_nls修改NLS设置并且to_number无需参数即可使用.