首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取当前NLS_NUMERIC_CHARACTERS会话设置

读取当前NLS_NUMERIC_CHARACTERS会话设置
EN

Stack Overflow用户
提问于 2019-09-23 20:33:05
回答 2查看 1.4K关注 0票数 0

我必须以数字小数作为参数运行一个报告,在不同的地区使用不同的NLS_NUMERIC_CHARACTERS,也就是逗号分隔符。

NLS_NUMERIC_CHARACTERS设置在会话级别,例如。使用

代码语言:javascript
复制
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';

表达式NLS_NUMERIC_CHARACTERS = ',.'表示小数标记为逗号,千位标记为点。

为了让用户在所有不同的区域都能正确输入,我假设会话的NLS_NUMERIC_CHARACTERS设置是正确的。我希望将该会话状态计算为一个字段值s_nlsparam,并使用它来正确地转换报表参数

代码语言:javascript
复制
.. to_number(expr,format, v_nlsparam) ...

到目前为止的计划。这将在多国背景下驯服任何潜在的ORA-01722: invalid number

现在我找不到读取NLS_NUMERIC_CHARACTERS设置的当前会话状态的方法。我检查了视图v$session,但它没有提供任何这样的字段。我都没有找到这样的参数,使用:

代码语言:javascript
复制
select sys_context('USERENV', .... ) from dual

有没有办法得到它?

EN

回答 2

Stack Overflow用户

发布于 2019-09-23 20:37:58

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

代码语言:javascript
复制
select value 
  from nls_session_parameters
 where parameter = 'NLS_NUMERIC_CHARACTERS';
票数 6
EN

Stack Overflow用户

发布于 2019-09-25 23:06:24

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

代码语言:javascript
复制
to_number( some_string, '999999999D99' )

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

代码语言:javascript
复制
to_char( some_number, '999G999G999D99' ) 

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58062551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档