ALTER SESSION SET nls_date_format не работает в APEX. Однако работает в SQL Developer

Я пытаюсь изменить параметры nsl с помощью предложения ALTER SESSION SET nls_date_format в Oracle Application Express, но параметры остаются прежними.

Однако в Oracle SQL Developer я могу их изменить.

Хотелось бы понять почему.

Я нашел эту ветку Формат числа и даты: изменение NLS_SESSION_PARAMETER не работает?, в котором Олафур Трюггвасон что-то комментирует "настройки приложения", которые переопределяют настройки, но я не могу найти конфигурацию. Должен быть в «Разработчике приложений», но это не так.

В APEX

Бегать

select * from nls_session_parameters;

Результаты

PARAMETER   VALUE

NLS_LANGUAGE    AMERICAN

NLS_TERRITORY   AMERICA

NLS_CURRENCY    $

NLS_ISO_CURRENCY    AMERICA

NLS_NUMERIC_CHARACTERS  .,

NLS_CALENDAR    GREGORIAN

NLS_DATE_FORMAT mm/dd/yyyy

NLS_DATE_LANGUAGE   AMERICAN

NLS_SORT    BINARY

NLS_TIME_FORMAT HH.MI.SSXFF AM

Бегать

ALTER SESSION SET nls_date_format ="dd/mm/yyyy";

Результаты

Statement processed.

0.00 seconds

Бегать

select * from nls_session_parameters;

Результаты

PARAMETER   VALUE

NLS_LANGUAGE    AMERICAN

NLS_TERRITORY   AMERICA

NLS_CURRENCY    $

NLS_ISO_CURRENCY    AMERICA

NLS_NUMERIC_CHARACTERS  .,

NLS_CALENDAR    GREGORIAN

NLS_DATE_FORMAT mm/dd/yyyy

NLS_DATE_LANGUAGE   AMERICAN

NLS_SORT    BINARY

NLS_TIME_FORMAT HH.MI.SSXFF AM

В РАЗРАБОТЧИКЕ SQL

Бегать

select * from nls_session_parameters;

Результаты

PARAMETER VALUE

NLS_LANGUAGE SPANISH

NLS_TERRITORY SPANISH

NLS_CURRENCY €

NLS_ISO_CURRENCY      SPAIN

NLS_NUMERIC_CHARACTERS  ,.

NLS_CALENDAR          GREGORIAN

NLS_DATE_FORMAT       mm/dd/yyyy

NLS_DATE_LANGUAGE     SPANISH

NLS_SORT          SPANISH

NLS_TIME_FORMAT       HH24.MI.SSXFF

NLS_TIME_TZ_FORMAT    HH24:MI:SSXFF TZR

NLS_DUAL_CURRENCY     €

NLS_COMP              BINARY

NLS_LENGTH_SEMANTICS  BYTE

NLS_NCHAR_CONV_EXCP   FALSE

Бегать

ALTER SESSION SET nls_date_format ="dd/mm/yyyy";

Результаты

1 fila insertadas.

Session alterado.

Бегать

select * from nls_session_parameters;

Результаты

PARAMETER   VALUE

NLS_LANGUAGE    SPANISH

NLS_TERRITORY   SPANISH

NLS_CURRENCY    €

NLS_ISO_CURRENCY    SPAIN

NLS_NUMERIC_CHARACTERS  ,.

NLS_CALENDAR    GREGORIAN

NLS_DATE_FORMAT dd/mm/yyyy

NLS_DATE_LANGUAGE   SPANISH

NLS_SORT    SPANISH

NLS_TIME_FORMAT HH24.MI.SSXFF

NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR

NLS_DUAL_CURRENCY €

NLS_COMP  BINARY

NLS_LENGTH_SEMANTICS BYTE

NLS_NCHAR_CONV_EXCP FALSE

person Sergio Ramos    schedule 20.10.2019    source источник


Ответы (2)


Вот как (если я правильно понял проблему):

  • войти в Apex
  • перейти в конструктор приложений
  • выберите приложение
  • в правом верхнем углу вы увидите кнопку Изменить свойства приложения.
  • он содержит 4 вкладки (Определение, Безопасность, Глобализация, Пользовательский интерфейс)
  • перейдите в Безопасность
  • прокрутите вниз до «Сеанс базы данных»
  • поместите что-то вроде этого в "Код инициализации PL / SQL":

    begin
      execute immediate q'[alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss']';
    end;
    
  • применить изменения

Это должно сработать.


Код инициализации может содержать и другие настройки, например NLS_NUMERIC_CHARACTERS:

execute immediate q'[alter session set nls_numeric_characters = ', ']';

При необходимости рассмотрите возможность отмены этих изменений - см. Раздел «Очистка кода PL / SQL» на той же странице безопасности, сразу под «кодом инициализации».

person Littlefoot    schedule 20.10.2019
comment
Вместо execute immediate можно также запустить DBMS_SESSION.SET_NLS('nls_date_format', 'dd.mm.yyyy hh24:mi:ss'); - person Wernfried Domscheit; 20.10.2019

Oracle APEX использует общий пул соединений для выполнения запросов. Если вы запускаете это в SQL Workshop, я не думаю, что вы получите ожидаемый результат.

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

По той же причине вы не можете использовать такие концепции, как постоянные переменные пакета и глобальные временные таблицы в Oracle APEX.

Если вам нужно изменить настройки вашего приложения, рекомендуемое место - это атрибуты глобализации в общих компонентах. (Третья вкладка в свойствах приложения.)  введите описание изображения здесь

person Scott    schedule 20.10.2019