Oracle APEX - принудительная сессия nls_numeric_characters на уровне приложения или сеанса - PullRequest
0 голосов
/ 27 июня 2018

Мы создаем отчеты, используя APEX, и нам нужно представить числа с "," в качестве десятичного разделителя и "" в качестве разделителя тысяч. Например: 1000000.001 становится 1 000 000,001

В настоящее время мы используем решение для форматирования каждого столбца наших отчетов в запросе:

select to_char(value_to_display,'999G999G999G999D9999999','nls_numeric_characters='', ''') value_to_display,
       ...
from   ...
;

Это работает, но не аккуратно, так как его нельзя легко изменить сразу, это требует, чтобы мы делали это для каждого столбца, который нам нужно отформатировать.

Мы хотели бы установить другое значение nls_numeric_characters на уровне сеанса, если это возможно, и переопределить конфигурацию NLS по умолчанию, которая, кажется, извлекается из настроек браузера, поскольку активация отладки показывает мне:

Language derived from: FLOW_PRIMARY_LANGUAGE, current browser language: en

alter session set nls_language='AMERICAN' nls_territory='AMERICA'

Кто-нибудь знает, какое изящное решение заставит 'nls_numeric_characters' проходить через сеанс (установить "при загрузке страницы" или что-то в этом роде) или даже по всему приложению (установить один раз для всех для всех страниц / сеансов)?

1 Ответ

0 голосов
/ 29 июня 2018

Вот один из вариантов:

  • перейдите к «Общим компонентам» приложения
  • перейти к «Атрибутам безопасности»
  • перейти к группе свойств "Сеанс базы данных"
  • поместите следующий код в «Инициализация кода PL / SQL»:

    begin
      execute immediate q'[alter session set nls_numeric_characters = ', ']';
    end;
    
  • запустить страницу

...