declare
type rand_list is table of varchar2(62) index by pls_integer;
source varchar2(62) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
perms rand_list;
source_variant varchar2(62);
begin
for i in 1 .. 10 loop
source_variant := null;
for j in ( select rownum r from dual connect by level <= 52 order by dbms_random.value )
loop
source_variant := source_variant || substr(source,j.r,1);
end loop;
for j in ( select rownum r from dual connect by level <= 10 order by dbms_random.value )
loop
source_variant := source_variant || substr(source,52+j.r,1);
end loop;
perms(i) := source_variant;
dbms_output.put_line(source_variant);
end loop;
end;
Statement processed.
YmaZdPivHMyznKBoJEwAxqhLQTtIrjbNGlFSUcCukXWVResfgDpO7403296581
QFhEHMWApyLfVlenaZTrGYXOizRBIjDvSuqkmPNdbcCgKJtUswxo5603984721
JHkxqVOaLUXsDjBSAcRdiztnTpygoZKbMuEYPWFwNlvrehCfmIGQ1924603758
dIVbcoMZLwNPqtmEhxBjJiRekOGpyXSTFWsulvfnrKYagzCADHQU6027314589
afzIRdJDmpVQqxPTMYbZsOkvtelSgNWiAEwXFnCHorLcBKhUGuyj3147692058
fTZnYIJRCzwxjmrQMqebKXGdNgWsUtocDVHPkaBSOyliFAvEhLup8017945623
siKvEDkwqOSXQpRZzMGyjteUPmTBhgcboAnWaIluJVfdxFYNHrCL0397562481
RXSDOIqaQfEkLieBZFuCtKjNYPMpzswHyGlrbWxJAUVodnvmcghT8730154269
HJpBPGzSibOwLUryImWNdkVYaKZcuhvexlnDEtMFCfjTAXsgoQRq8753140962
KMOLFfSmNVUspnBvekrXuQZoHdhDiCRxtqIaATbzgwlWJPcyjEYG2906584371
select
translate(
'Connor McDonald',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
'ehZAFjmtYwWilTRDnCcLrvQqEpakKGPMxXyudVUNsoJOBfzSIbHg2163095784')
from dual
TRANSLATE('CONNORMCDONALD','ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','EHZAFJMTYWWILTRDNCCLRVQQEPAKKGPMXXYUDVUNSOJOBFZSIBHG2163095784') | ZsNNsO lKAsNaVG |
---|
create or replace
package masker is
function rand_masks(p_size int default 255, p_refresh varchar2 default 'N',p_seed number default 0) return sys.odcivarchar2list pipelined;
function standard_source return varchar2;
function idx_entry(p_idx int, p_size int default 255, p_refresh varchar2 default 'N',p_seed number default 0) return varchar2;
function mask(p_input varchar2) return varchar2;
end;
Package created.
create or replace
package body masker is
perms sys.odcivarchar2list := sys.odcivarchar2list();
procedure init(p_size int,p_seed int) is
source varchar2(62) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
source_variant varchar2(62);
begin
dbms_random.seed(p_seed);
perms.delete;
perms.extend(p_size);
for i in 1 .. p_size loop
source_variant := null;
for j in ( select rownum r from dual connect by level <= 52 order by dbms_random.value )
loop
source_variant := source_variant || substr(source,j.r,1);
end loop;
for j in ( select rownum r from dual connect by level <= 10 order by dbms_random.value )
loop
source_variant := source_variant || substr(source,52+j.r,1);
end loop;
perms(i) := source_variant;
-- dbms_output.put_line(source_variant);
end loop;
end;
function rand_masks(p_size int default 255, p_refresh varchar2 default 'N',p_seed number default 0) return sys.odcivarchar2list pipelined is
begin
if perms.count < p_size or p_refresh in ('Y','y') then
init(p_size,p_seed);
end if;
for i in 1 .. p_size
loop
pipe row ( perms(i));
end loop;
return;
end;
function standard_source return varchar2 is
begin
return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
end;
function idx_entry(p_idx int, p_size int default 255, p_refresh varchar2 default 'N',p_seed number default 0) return varchar2 is
begin
if perms.count < p_size or p_refresh in ('Y','y') then
init(p_size,p_seed);
end if;
return perms(p_idx);
end;
function mask(p_input varchar2) return varchar2 is
begin
return translate(p_input,masker.standard_source,masker.idx_entry(ascii(p_input)));
end;
end;
Package Body created.
create table t ( pk int, n varchar2(50))
Table created.
insert into t values (1,'Connor McDonald')
1 row(s) inserted.
insert into t values (2,'Chris Saxon')
1 row(s) inserted.
insert into t values (3,'Maria Colgan')
1 row(s) inserted.
insert into t values (4,'Bobby Curtis')
1 row(s) inserted.
insert into t values (5,'Joel Kallman')
1 row(s) inserted.
insert into t values (6,'Steven Feuerstein')
1 row(s) inserted.
insert into t values (7,'Connor McDonald')
1 row(s) inserted.
select pk, n, masker.mask(n) diddled
from t
PK | N | DIDDLED | 1 | Connor McDonald | sAJJAe CvnAJjWt | 2 | Chris Saxon | sweOy RjrAJ | 3 | Maria Colgan | czEJz BhMbzm | 4 | Bobby Curtis | nkjjI EpzLBS | 5 | Joel Kallman | oYfi luiiIuj | 6 | Steven Feuerstein | CyUrUE SUtUWQyUXE | 7 | Connor McDonald | sAJJAe CvnAJjWt |
---|