Формат числа и даты: изменение NLS_SESSION_PARAMETER не работает?

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):

  • Основной язык приложения: Французский (Франция) ( fr)
  • Язык приложения, производный от: Session
  • Формат даты приложения: DD-MON-YYYY

Мне не удается заставить его работать должным образом... Я по-прежнему получаю числа вроде -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;

Результат:

report NLS parameters no changes

Как видите, вызовы 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;

отчет показывает, что сеанс был изменен:

report NLS parameters

Затем я создал новую тестовую страницу with :

  1. Вышеупомянутый процесс перед заголовком.
  2. Отчет для отображения значений параметров NLS.
  3. Отчет, который показывает дату и числа из одной из моих таблиц.
  4. Элементы текстового поля с типом источника «SQL Query» для получения даты.
  5. Элемент поля «Число» с типом источника «SQL-запрос» для получения числа.
  6. Кнопка, связанная с JQuery, которая вызывает процесс приложения, который вызывает процедуру PL/SQL, которая htp.prn()дата из таблицы, а затем заполняет элемент моего текстового поля.
  7. Кнопка, связанная с JQuery, которая выполняет вставку (используя процесс приложения и т. д.) двух полей в таблице.

После загрузки страницы отчет показывает, что сессия была изменена правильно, и я получил правильные форматы чисел и дат в элементах и ​​в отчете. Кнопка "Вставить" делает вставку без каких-либо проблем.

Когда я нажимаю кнопку "getDate", чтобы получить дату из базы данных с помощью вызова ajax, я получаю дату во французском формате! И тогда кнопка «вставить» не работает (неверная дата).

Есть ли у вас какие-либо идеи о том, почему получение значений из JavaScript(выполнение ajax-вызова процессу приложения по запросу, который вызывает функцию PL/SQL в пакете) вызывает проблему?

И все еще странно, как и на других моих существующих страницах, я получаю неправильный формат в отчете, даже если я использую тот же процесс Перед заголовком. Мы должны изучить это подробнее с моим коллегой, возможно, у нас где-то есть «скрытый» фрагмент кода, который все ломает.

Я просмотрел данные отладочного сообщения для страницы, но ничего странного для меня не было.

7
задан Yann39 27 June 2012 в 09:54
поделиться