ALTER SESSION SET nls_date_format не работает в APEX. Однако работает в SQL Developer - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь изменить 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

Ответы [ 2 ]

1 голос
/ 21 октября 2019

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

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

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

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

1 голос
/ 20 октября 2019

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

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

    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» на той же странице безопасности, чуть ниже «Код инициализации».

...