使用Oracle expdp实用程序更改行数据

时间:2013-04-30 07:43:58

标签: oracle remap expdp

我是开发人员 - 不是DBA或数据库专家 - 但作为我工作的一部分,我应该能够导出数据以将其导入另一个数据库。导出时我需要能够改变进入转储文件的行数据。那可能吗?假设我有一个值为ID的列1,2,3,4...,在导出时我应该可以为结果数据ID * -1执行-1,-2,-3,-4...。当目标数据库中已存在数据时,这将有助于我迁移数据。

1 个答案:

答案 0 :(得分:3)

您可以使用expdp REMAP_DATA选项执行此操作,假设您可以创建包和函数来执行转换:

使用一些简单的数据:

create table t42 (id number);

insert into t42 select level from dual connect by level <= 5;

select * from t42;

        ID
----------
         1
         2
         3
         4
         5

...和一个包函数:

create package p42 as
    function negate(p_number in number) return number;
end p42;
/

create package body p42 as
    function negate(p_number in number) return number is
    begin
        return -1 * p_number;
    end;
end p42;
/

您可以使用remap_data导出,然后在此测试中导入相同的数据库/架构:

expdp directory=data_pump_dir dumpfile=d42.dmp nologfile=yes tables=t42 \
    remap_data=t42.id:p42.negate
impdp directory=data_pump_dir dumpfile=d42.dmp nologfile=yes tables=t42 \
    content=data_only

该表现在有:

select * from t42;

        ID
----------
         1
         2
         3
         4
         5
        -1
        -2
        -3
        -4
        -5

您也可以使用impdp REMAP_DATA参数对导入进行相同的修改。原理是一样的,只取决于你想要修改数据的时间点。