對於資訊保安有要求的,在資料下發和同步過程中需要對含有使用者身份資訊的敏感字段脫敏,包括使用者姓名、證件號、位址等等,下面是自定義函式的**
create or replace function f_get_sensitive(in_str varchar, in_type number)return varchar2 is
v_str_length number;
v_name varchar2(1000);
v_n number;
v_hid varchar2(200);
v_sql varchar2(200);
v_num_flag number;
/****
n_type 脫敏字段型別
1 :名稱
11:位址
2 :證件
3 :銀行賬號
4 :聯絡**
5 :接入號碼
***/
begin
v_str_length := length(in_str);
v_n := 0;
if v_str_length=0 then
return(null);
end if;
/**********名稱和位址脫敏規則**********/
if in_type = 1 or in_type=11 then
if v_str_length = 2 or v_str_length = 3 then
v_name := regexp_replace(in_str, '(.)', '*', 2, 1);
elsif v_str_length < 2 then
v_name :=in_str;
else
while v_n < v_str_length / 2 loop
v_n := v_n + 1;
v_hid := v_hid || '*';
end loop;
v_name := substr(in_str, 0, v_str_length / 2) || v_hid;
end if;
return(v_name);
end if;
/**********證件脫敏規則**********/
if in_type = 2 then
if v_str_length = 15 then
v_name := substr(in_str, 0, 6) || '******' || substr(in_str, -3, 3);
elsif v_str_length = 18 then
v_name := substr(in_str, 0, 6) || '********' || substr(in_str, -4, 4);
else
while v_n < v_str_length / 3 loop
v_n := v_n + 1;
v_hid := v_hid || '*';
end loop;
v_name := substr(in_str, 0, v_str_length / 3) || v_hid ||
substr(in_str, -v_str_length / 3, v_str_length / 3);
end if;
return(v_name);
end if;
/**********銀行賬號脫敏規則**********/
if in_type = 3 then
if v_str_length > 15 then
v_name := substr(in_str, 0, 4) || '********' || substr(in_str, -4, 4);
else
v_name :=in_str;
end if;
return(v_name);
end if;
/**********聯絡**脫敏規則**********/
if in_type = 4 then
v_name := substr(in_str, 0, v_str_length - 4) || '****';
return(v_name);
end if;
/**********接入號碼脫敏規則**********/
if in_type = 5 then
v_sql := 'select count(1) from dual where length(''' || in_str ||
''') = length(regexp_replace(''' || in_str || ''', ''[^0-9]''))';
execute immediate v_sql
into v_num_flag;
if v_num_flag = 1 and (v_str_length = 7 or v_str_length = 8) then
v_name := substr(in_str, 0, 2) || '****' || substr(in_str, -2, 2);
elsif v_num_flag = 1 and v_str_length = 11 then
v_name := substr(in_str, 0, 3) || '*****' || substr(in_str, -3, 3);
else
v_name := in_str;
end if;
return(v_name);
end if;
return(in_str);
exception
when others then
-- dbms_output.put_line('1'||v_sql);
v_name := '-1';
return v_name;
end f_get_sensitive;
Oracle自定義函式
語法如下 create or replace function function name argment type,argment type return return type 返回資料的型別 變數的申明,比如 stryuan varchar2 150 begin function body 函...
oracle 自定義函式
下面是乙個前輩寫的判斷是否是手機號的函式 create or replace function ismobile pmsg varchar2 return number isvprefix varchar2 20 vlen number begin vlen lengthb pmsg if vlen...
Oracle自定義函式
二 刪除自定義函式 三 應用經驗 在oracle資料庫中,為了實現特定的功能,可以自定義函式,就像c c 語言,除了系統的庫函式,程式設計師還會編寫很多自定義的函式。create or replace function 函式名 引數1 模式 資料型別,return 資料型別 as 定義區域性變數。變...