我是一名开发人员——不是 DBA 或数据库专家——但作为我工作的一部分,我应该能够导出数据以将其导入另一个数据库。导出时,我需要能够更改进入转储文件的行数据。那可能吗?假设我有一列ID
有值1,2,3,4...
,并且在导出时我应该能够ID * -1
为结果数据做-1,-2,-3,-4...
。当目标数据库中已经存在数据时,这将有助于我迁移数据。
问问题
1282 次
1 回答
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
您也可以使用参数对导入进行相同的修改。原理是一样的,只是看你要在什么时候修改数据。
于 2013-04-30T10:59:24.993 回答