1

我想在使用 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。谢谢。

4

0 回答 0