在Oracle报告中设置基于会话的NLS\u数字\u字符

在Oracle报告中设置基于会话的NLS\u数字\u字符,oracle,oraclereports,reportserver,Oracle,Oraclereports,Reportserver,我正在尝试创建一个可以在英语和(加拿大)法语数字格式之间切换的报告(1234.56 vs 1234,56),但遇到了一些问题 在我开始之前,我想说的是,在过去,我们总是把法语数字转换成一个字符,然后在那里进行适当的字符串修改,但这显然不是最好的解决方案,我正在努力寻找更好的方法 我尝试做的第一件事是在Oracle报告本身的BEFORE报告触发器中添加以下行: srw.do_sql ('alter session set nls_numeric_characters = '', '''); 我

我正在尝试创建一个可以在英语和(加拿大)法语数字格式之间切换的报告(1234.56 vs 1234,56),但遇到了一些问题

在我开始之前,我想说的是,在过去,我们总是把法语数字转换成一个字符,然后在那里进行适当的字符串修改,但这显然不是最好的解决方案,我正在努力寻找更好的方法

我尝试做的第一件事是在Oracle报告本身的BEFORE报告触发器中添加以下行:

srw.do_sql ('alter session set nls_numeric_characters = '', '''); 
我用格式掩码(NNNGNNNGNN0D00)设置了数字字段,因此我假设G和D将使用会话的NLS_数字字符设置,但它们似乎没有

为了查看设置是否正在实际更改,我在报告中创建了以下查询并显示其输出:

select value from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
果然,使用我的alter session命令,输出从“,”更改为“,”

在网上研究了更多内容后,我了解到,确实需要根据本文档对Oracle Report Server配置进行更改-

我联系了负责Oracle Application Server的团队,让他们尝试插入设置英文和法文数字格式所需的配置,他们添加了以下内容:

<environment id="EN">
    <envVariable name="NLS_LANG" value="AMERICAN_AMERICA.WE8ISO8859P1"/>
 </environment>
 <environment id="FR">
    <envVariable name="NLS_LANG" value="FRENCH_CANADA.WE8ISO8859P1"/>
    <envVabiable name="NLS_NUMERIC_CHARACTERS" value="', '"/>
 </environment>

报表服务器已重新启动,我输入了URL以请求报表以及ENVID=FR参数,但仍然没有成功。报告已运行,但数字格式仍使用、、进行分组和小数分隔


有人知道我们缺少了什么或者我们还可以尝试什么吗?

我也遇到了同样的问题,并且在需要应用NLS格式的地方处理了char();不确定在报表查询中这样做是否可行……是的,过去我们总是转换为字符以正确显示它,但我正在寻找一种方法,同时将它保留为数字字段。这样做的原因是:1)在将来将英语报告转换为法语时,这意味着更少的变化。2) 如果报告有摘要字段来显示总计,那么我们需要进行查询,返回数字(供摘要使用)和to_字符版本(显示在报告上),并为开发人员添加工作。谢谢你的意见。