0

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设置的当前会话状态的方法。我检查了 view v$session,但它没有提供任何这样的字段。我都没有使用以下方法找到这样的参数:

select sys_context('USERENV', .... ) from dual

有没有办法得到它?

4

2 回答 2

6

您可以使用此选择查看该信息:

select value 
  from nls_session_parameters
 where parameter = 'NLS_NUMERIC_CHARACTERS';
于 2019-09-23T12:37:57.550 回答
0

您确定您真的需要知道当前值吗?由于您假设在您的用户会话中设置正确,因此在转换函数中使用通用格式模型通常更有意义。例如

to_number( some_string, '999999999D99' )

将使用会话的小数点将字符串转换为数字(如果您需要支持大于十亿的数字,请添加更多的 9)。如果会话使用逗号作为小数分隔符,它将查找逗号。如果会话使用句点作为小数分隔符,它将查找句点。相似地

to_char( some_number, '999G999G999D99' ) 

将使用会话使用的任何组和小数分隔符将数字转换为字符串。

于 2019-09-25T15:06:24.387 回答