我必须以数字小数作为参数运行一个报告,在不同的地区使用不同的NLS_NUMERIC_CHARACTERS,也就是逗号分隔符。
NLS_NUMERIC_CHARACTERS设置在会话级别,例如。使用
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';表达式NLS_NUMERIC_CHARACTERS = ',.'表示小数标记为逗号,千位标记为点。
为了让用户在所有不同的区域都能正确输入,我假设会话的NLS_NUMERIC_CHARACTERS设置是正确的。我希望将该会话状态计算为一个字段值s_nlsparam,并使用它来正确地转换报表参数
.. to_number(expr,format, v_nlsparam) ...到目前为止的计划。这将在多国背景下驯服任何潜在的ORA-01722: invalid number。
现在我找不到读取NLS_NUMERIC_CHARACTERS设置的当前会话状态的方法。我检查了视图v$session,但它没有提供任何这样的字段。我都没有找到这样的参数,使用:
select sys_context('USERENV', .... ) from dual有没有办法得到它?
发布于 2019-09-23 20:37:58
您可以使用此select查看该信息:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';发布于 2019-09-25 23:06:24
您确定真的需要知道当前值吗?由于您假设在用户会话中正确设置了该设置,因此在转换函数中使用通用格式模型通常会更有意义。例如
to_number( some_string, '999999999D99' )将使用会话的小数点将字符串转换为数字(如果需要支持大于十亿的数字,则添加更多的9)。如果会话使用逗号作为小数点分隔符,它将查找逗号。如果会话使用句点作为小数点分隔符,它将查找句点。类似的
to_char( some_number, '999G999G999D99' ) 将使用会话使用的任何组和小数分隔符将数字转换为字符串。
https://stackoverflow.com/questions/58062551
复制相似问题