Oracle DB: конвертировать столбцы меток времени (CET / CEST) в UTC при выполнении экспорта / импорта Oracle - PullRequest
0 голосов
/ 28 февраля 2019

Моя проблема в том, что в моей базе данных oracle db есть столбец меток времени (6) (без информации о метках времени), но метки времени хранятся в CET / CEST (Европа / Берлин).

Нам нужно исправить метки времени так, чтобыUTC (поскольку у нас уже есть проблемы, когда время переключается с CEST на CET - например, 28.10.2018)

Я уже нашел следующее, как это можно сделать с помощью сценария обновления: Как обновить столбец TIMESTAMP доTIMESTAMP с зоной времени в Oracle

Поскольку мы также планируем перейти с 11 на 12, мой вопрос, можно ли это сделать во время выполнения дампа exp / imp (expdp / impdp)?

1 Ответ

0 голосов
/ 28 февраля 2019

Правильное преобразование будет следующим:

 FROM_TZ(YOUR_COLUMN, 'Europe/Berlin')  AT TIME ZONE 'UTC'

, это возвращает значение TIMESTAMP WITH TIME ZONE.Если вы предпочитаете получить TIMESTAMP, тогда вы можете использовать

 SYS_EXTRACT_UTC(YOUR_COLUMN, 'Europe/Berlin')

Однако я не знаю, как включить это в импорт / экспорт.Я предполагаю, что вы должны использовать REMAP_DATA :

CREATE OR REPLACE PACKAGE Convert_Date AS       
    FUNCTION TO_UTC(ts IN TIMESTAMP) RETURN TIMESTAMP;
END Convert_Date;
/


CREATE OR REPLACE PACKAGE BODY Convert_Date AS

FUNCTION TO_UTC(ts IN TIMESTAMP) RETURN TIMESTAMP
BEGIN
    RETURN SYS_EXTRACT_UTC(ts, 'Europe/Berlin');    
END;

END Convert_Date;
/

, а затем использовать этот параметр импорта:

REMAP_DATA=[schema.]tablename.column_name:Convert_Date.TO_UTC
...