在使用Oracle expdp工具时修改行数据



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

您可以使用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导出,然后导入到相同的DB/模式中:

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

您也可以对import进行相同的修改,使用impdp REMAP_DATA参数代替。原理是一样的,只是取决于你想在什么时候修改数据。

相关内容

  • 没有找到相关文章

最新更新