我想在使用 expdp 导出时屏蔽表数据。
表“TEST_MASK”有两列:'address'(varchar(100)) & 'balance'(varchar(50))
这里我们需要使用这个列名和余额列值来屏蔽地址列。
测试掩码表:
address | balance
------------------------------------------------
b-9,6th yrd, germany | 557586
4th main,hoysang-09832 | 75846
karola,digha europe | 89657
create table test_mask(address varchar2(100),balance varchar2(100));
insert command is:
insert into test_mask values ('b-9,6th yrd, germany','557586');
insert into test_mask values ('4th main,hoysang-09832','75846');
insert into test_mask values ('karola,digha europe','89657');
屏蔽逻辑:
1.
'column_name'||REGEXP_REPLACE(substr(COLUMN,1,5),'[[alpha]]','X')
---------- eg:addressX-9,6 (第一行被屏蔽)
---- column_name:传递给函数。
2.从余额中取出前 4 位并附加列名(地址)
-----例如:5575address(不要只附加“地址”字符串,因为我必须将它用于许多表和列,取列名传递给 REMAP_DATA 中的函数)
我尝试使用下面的 pl/sql 函数来使用下面给出的屏蔽逻辑 1 屏蔽数据:
create or replace package test_pcg as
function test_func(p_in in varchar2) return varchar2;
end ;
create or replace package body test_pcg as
function test_func(p_in in varchar2) return varchar2
as
column_name varchar2(100):=p_in;
begin
if p_in is not null then
return
column_name||REGEXP_REPLACE(substr(p_in,1,5),'[[alpha]]','X');
else
return p_in;
end if;
end;
end;
/
EXPDP 命令如下:
expdp SYSTEM/****** schemas=schema_name directory=DATA_PUMP_DIR dumpfile=DATA_PUMP.dmp tables=Test_mask logfile= DATA_PUMP.log
REMAP_DATA=schema_name.Test_mask.address:schema_name.test_pcg.test_func;
在这里,我没有得到 column_name('address') 而不是 column_name,而是得到了列值。
column_name||REGEXP_REPLACE(substr(p_in,1,5),'[[alpha]]','X')=addressX-9,6(预期)
--------------- ------------ b-9,6th yrd, GermanyX-9,6(实际)
请指导我解决这个问题,我该如何继续进行屏蔽逻辑 2。谢谢。