Oracle DB:在执行Oracle导出/导入时将时间戳(CET / CEST)列转换为UTC

问题描述 投票:0回答:1

我的问题是我的oracle db有timestamp(6)列(没有任何时间戳信息),但时间戳存储在CET / CEST(Europe / Berlin)中。

我们需要将时间戳更正为UTC(因为当时间从CEST切换到CET时我们已经遇到问题 - 例如28.10.2018)

我已经通过更新脚本找到了以下内容:How to update a TIMESTAMP column to TIMESTAMP WITH TIME ZONE in Oracle

由于我们还计划从11迁移到12 - 我的问题是它是否也可以在转储exp / imp(expdp / impdp)期间完成?

oracle timestamp utc impdp expdp
1个回答
2
投票

正确的转换将是这一个:

 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
© www.soinside.com 2019 - 2024. All rights reserved.