Oracle 11.2.0.3.0, APEX 4.1.1.00.23.
Нам нужно отобразить в нашем приложении числав формате FM999999999990.000
и датыв английском формате ДД-МОН-ГГГГ
.
Даже если язык приложения изменится (французский, испанский и т. д.), нам всегда нужен этот формат для чисел (без пробела или запятой для разделителя групп и точки для десятичного разделителя, т.е. - 1254.010) и дату (3 первые буквы английского названия месяца т.е. 12-FEB-2012).
Вот атрибуты глобализации, которые мы используем (Application Builder -> Application -> Edit Globalization Attributes):
Мне не удается заставить его работать должным образом...
Я по-прежнему получаю числа вроде -1254,01
и даты типа 12-ФЕВР.-2012
вместо -1254.010
и 12-ФЕВ-2012
.
Кажется, APEX игнорирует любой вызов для изменения сеанса...
Я попытался ввести следующий код в атрибут «Initialization PL/SQL Code» (Application Builder -> Application -> Edit Security Attributes), но безуспешно:
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
ничего не меняют...
Когда Я пытаюсь ALTER SESSION
вызвать в процессе приложения " Перед заголовком", сеанс кажется измененным (отчет показывает измененные значения), но я все еще получаю неверный формат даты и числа в своих отчетах. и предметы...
Я попробовал атрибут " Маска формата " элемента " Числовое поле ", но, похоже, это тоже ничего не меняет...
Единственный способ получить его работать — это вызывать ALTER SESSION
в каждой функции PL/SQL, которую я вызываю из APEX. А для отчетов я могу использовать атрибут столбца «Формат числа/даты».
ВОПРОС: Можно ли как-то изменить число и дату сеанса для всего приложения?
Когда я запускаю следующий процесс перед заголовком на каждой странице:
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;
отчет показывает, что сеанс был изменен:
Затем я создал новую тестовую страницу with :
htp.prn()
дата из таблицы, а затем заполняет элемент моего текстового поля.После загрузки страницы отчет показывает, что сессия была изменена правильно, и я получил правильные форматы чисел и дат в элементах и в отчете. Кнопка "Вставить" делает вставку без каких-либо проблем.
Когда я нажимаю кнопку "getDate", чтобы получить дату из базы данных с помощью вызова ajax, я получаю дату во французском формате! И тогда кнопка «вставить» не работает (неверная дата
).
Есть ли у вас какие-либо идеи о том, почему получение значений из JavaScript(выполнение ajax-вызова процессу приложения по запросу, который вызывает функцию PL/SQL в пакете) вызывает проблему?
И все еще странно, как и на других моих существующих страницах, я получаю неправильный формат в отчете, даже если я использую тот же процесс Перед заголовком. Мы должны изучить это подробнее с моим коллегой, возможно, у нас где-то есть «скрытый» фрагмент кода, который все ломает.
Я просмотрел данные отладочного сообщения для страницы, но ничего странного для меня не было.