Формат времени Oracle UTC - PullRequest
       9

Формат времени Oracle UTC

2 голосов
/ 02 сентября 2010
CREATE TABLE DIALOGUE_TABLE(EXPIRE_TIME TIMESTAMP);

Следующий фрагмент кода находится внутри хранимой процедуры:

PO_EXPIRETIME  :- OUT PARAM of procedure a varchar2

SELECT TO_CHAR(SYS_EXTRACT_UTC(EXPIRE_TIME)) 
  INTO PO_EXPIRETIME 
  FROM DIALOGUE_TABLE; 

Когда я запускаю Stored Proc с сервера, используя EXEC, и печатается PO_EXPIRETIME, метка времени соответствует формату UTC.

Но когда я вызываю хранимую процедуру из OCCI и клиента, полученная метка времени не совпадает, но это фактическая метка времени в таблице, не UTC отформатированная.

Может быть, что-то мне не хватает, но то, что яне знаешь?Что-то на стороне клиента мне нужно сделать?

1 Ответ

5 голосов
/ 02 сентября 2010

Если столбец объявлен как TIMESTAMP, а не, скажем, TIMESTAMP с зоной времени или TIMESTAMP с локальной зоной времени, отметка времени, которая хранится в таблице, не будет иметь компонента часового пояса. В результате SYS_EXTRACT_UTC преобразует временную метку в UTC, используя часовой пояс сеанса, который контролируется клиентом и может отличаться на разных клиентских компьютерах. Я подозреваю, что если вы запустите

SELECT SessionTimeZone
  FROM dual;

из приложения OCCI и из сеанса SQL * Plus, в результате которого вы получите разные результаты, из-за которых возвращаемые строки будут другими.

Если вы хотите, чтобы возвращаемая строка не зависела от клиентского компьютера, я бы посоветовал сохранить часовой пояс в столбце базы данных. Изменяет ли определение схемы использование TIMESTAMP WITH TIME ZONE? За исключением этого, вы можете убедиться, что на каждом клиентском компьютере настроен одинаковый часовой пояс, и / или запустить явную ALTER SESSION, т. Е.

ALTER SESSION 
  SET time_zone = '-05:00';

в хранимой процедуре, чтобы гарантировать, что преобразование всегда выполняется из определенного часового пояса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...