甲骨文 11.2.0.3.0,APEX 4.1.1.00.23。
我们需要在我们的应用程序中以英文格式显示数字FM999999999990.000
和日期DD-MON-YYYY
。
即使应用程序语言要改变(法语、西班牙等),我们总是需要这种格式的数字(组分隔符没有空格或逗号,小数点分隔符,即 -1254.010)和日期(3英文月份名称的第一个字母,即 12-FEB-2012)。
以下是我们正在使用的全球化属性(应用程序生成器 -> 应用程序 -> 编辑全球化属性):
- 申请主要语言:法语(法国)(fr)
- 应用程序语言源自:会话
- 申请日期格式:DD-MON-YYYY
我无法让它按预期工作......我仍然得到像-1254,01
和日期这样的数字12-FÉVR.-2012
而不是-1254.010
和12-FEB-2012
。似乎 APEX 忽略了任何更改会话的调用...
我尝试在“初始化 PL/SQL 代码”属性(应用程序生成器 -> 应用程序 -> 编辑安全属性)中输入以下代码,但没有成功:
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS= ''.,'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_LANGUAGE = ''AMERICAN'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LANGUAGE = ''AMERICAN'' ';
END;
我有一个包含以下查询的报告,以查看参数是否正在更改:
SELECT
a1.parameter as "Parameter",
a1.value as "Database value",
a2.value as "Instance value",
a3.value as "Session value"
FROM
nls_database_parameters a1
LEFT JOIN nls_instance_parameters a2 ON a1.parameter = a2.parameter
LEFT JOIN nls_session_parameters a3 ON a1.parameter = a3.parameter
ORDER BY
a1.parameter asc;
结果:
如您所见,ALTER SESSION
电话不会改变任何东西...
当我尝试在“ Before HeaderALTER SESSION
”应用程序流程中调用时,会话似乎被更改(报告显示修改后的值),但我的报告和项目中的日期和数字格式仍然错误......我尝试了“格式掩码” “数字字段”项目的属性,但它似乎也没有改变任何东西......
我可以让它工作的唯一方法是调用ALTER SESSION
我从 APEX 调用的每个 PL/SQL 函数。对于报告,我可以使用“数字/日期格式”列属性。
问题:有什么方法可以更改整个应用程序会话的数字和日期参数?
编辑 :
当我在每个页面上运行以下Before Header 进程时:
BEGIN
APEX_UTIL.SET_SESSION_LANG('fr');
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS= ''.,'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_LANGUAGE = ''AMERICAN'' ';
END;
报告显示会话已更改:
然后我创建了一个新的测试页面:
- 上面的Before Header过程。
- 显示 NLS 参数值的报告。
- 一份显示我的一张表中的日期和数字的报告。
- 源类型为“SQL 查询”的文本字段项以获取日期。
- 源类型为“SQL 查询”的数字字段项以获取数字。
- 一个与 JQuery 绑定的按钮,它调用一个应用程序进程,该进程调用一个 PL/SQL 过程,该过程
htp.prn()
从表中获取日期,然后填充我的文本字段项。 - 一个与 JQuery 绑定的按钮,用于插入(使用应用程序进程等)表中的两个字段。
加载页面后,报告显示会话已正确更改,并且我在项目和报告中获得了正确的数字和日期格式。“插入”按钮可以毫无问题地进行插入。
当我单击“getDate”按钮以使用 ajax 调用从数据库中获取日期时,我得到的是法语格式的日期!然后“插入”按钮失败(invalid date
)。
您是否知道为什么从 JavaScript 获取值(对在包中调用 PL/SQL 函数的按需应用程序进程进行 ajax 调用)会导致问题?
并且在我的其他现有页面中仍然很奇怪,即使我使用相同的 Before Header 流程,我在报告中的格式也错误。我们必须和我的同事一起更多地研究这个问题,也许我们在某处有一段“隐藏”的代码会破坏一切。
我查看了页面的调试消息数据,但对我来说没什么奇怪的。