Моя проблема заключается в том, что в моей базе данных оракула есть столбец timestamp(6) (без какой-либо информации о временных метках), но временные метки хранятся в CET/CEST (Европа/Берлин).
Нам нужно исправить метки времени на UTC (потому что у нас уже есть проблемы, когда время переключается с CEST на CET — например, 28.10.2018)
Я уже нашел следующее, как это можно сделать с помощью скрипта обновления: Как обновить столбец TIMESTAMP до TIMESTAMP WITH TIME ZONE в Oracle
Так как мы тоже планируем мигрировать с 11 на 12 - у меня вопрос, а можно ли это было сделать и во время дампа exp/imp (expdp/impdp)?
Правильное преобразование будет таким:
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