【问题标题】:Data masking in Oracle SQL select statementOracle SQL select 语句中的数据屏蔽
【发布时间】:2013-08-18 02:20:34
【问题描述】:

不使用PL/SQL,是否可以在SELECT语句中进行数据屏蔽?

例如:

(原样) SELECT 'this is a string' from DUAL;

这是一个字符串

(未来)SELECT 'this is a string' from DUAL;

xxxx xx x xxxxxx

【问题讨论】:

  • 请更具体。

标签: sql oracle data-masking


【解决方案1】:

REGEXP_REPLACE 可以这样做:

SELECT REGEXP_REPLACE('this is a string', '\w', 'x') FROM DUAL;

这会将所有非空白字符替换为x。要仅替换字母,请尝试以下操作:

SELECT REGEXP_REPLACE('this is a string', '[A-Za-z]', 'x') FROM DUAL;

【讨论】:

    【解决方案2】:

    您可以创建如下用户定义的函数,并在查询中调用该函数来屏蔽数据。

    create or replace function scrubbing(word in varchar2)
    return varchar2
    as
    each_var char(2);
    final_val varchar2(100);
    complete_data varchar2(4000);
    each_word varchar2(1000);
    cursor val is select substr(replace(word,' ','#'),-level,1)  from dual connect by level<=length(word);
    begin
    open val;
    --final_val:= '';
    loop
        fetch val into each_var;
        exit when val%NOTFOUND;
        --dbms_output.put_line(each_var);
        final_val := trim(final_val)||trim(each_var);
        --dbms_output.put_line(final_val);
        select regexp_substr(final_val,'[A-Za-z]+') into each_word from dual;
        select replace(translate(final_val,each_word,dbms_random.string('L',length(word))),'#',' ') into complete_data from dual;
    end loop;
    return complete_data;
    end;    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多