У меня есть хранимая процедура с динамическим SQL, которая создает таблицу и вызывает другую процедуру для вставки некоторых значений в таблицу. Хранимая процедура также устанавливает некоторые параметры сеанса, одним из которых является файл NLS_DATE_FORMAT
.
Этот параметр не работает во время выполнения процедуры. Я пытался запустить процедуру под SYSTEM
(владельцем) и под пользователем ADMIN
с правами DBA, Connect и Resource, но она всегда отображается в формате DD-MON-RR
вместо желаемого MM/DD/YYYY
. В SQL Developer в разделе DBA->Конфигурация базы данных->Текущие свойства базы данных NLS_DATE_FORMAT
также отображается в формате DD-MON-RR
.
Есть ли способ изменить это для всей базы данных? Я нашел и попробовал следующее, но это вообще не сработало (включая остановку и перезапуск базы данных):
ALTER SYSTEM SET NLS_DATE_FORMAT = 'MM/DD/YYYY' SCOPE=SPFILE;
Я искал ответы в SPFILE и init.ora, но лучшее, что я нашел, это триггер, который устанавливал значение после входа в систему для каждого пользователя. Я не против этого, но я хотел бы узнать, есть ли более глобальный способ установить параметр один раз без необходимости создавать триггер, который устанавливает следующий параметр сеанса:
ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY';
И вот соответствующая часть моей хранимой процедуры:
CREATE OR REPLACE
PROCEDURE DATE_DIM_PROCEDURE(P_DATE DATE)
AUTHID CURRENT_USER --Not sure why this is needed since my only two users, but it throws an error without it
IS
V_START_DATE DATE := '01/01/1950';
V_CURRENT_DATE DATE := V_START_DATE;
V_END_DATE DATE := '12/31/2099';
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LANGUAGE = ''AMERICAN'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_TERRITORY = ''AMERICA'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_CALENDAR = ''GREGORIAN'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT = ''MM/DD/YYYY'' ';
EXECUTE IMMEDIATE 'CREATE TABLE (...)';
WHILE V_CURRENT_DATE <= V_END_DATE
NEW_DATE(P_DATE); --Procedure call that inserts values into table
LOOP;
END DATE_DIM_PROCEDURE;
Как только процедура запускается (и вызывает последующую процедуру для вставки значений), когда я открываю таблицу, для любого пользователя NLS_DATE_FORMAT
не изменяется (т.е. он по-прежнему имеет формат DD-MON-RR
вместо MM/DD/YYYY
).
Спасибо.
MM/DD/YYYY
(что, как я думал, было возможно). - person user2063351   schedule 12.07.2013