Oracle 去除字符传中重复的记录 自定义函数

来源:互联网 发布:美国大学教育专业知乎 编辑:程序博客网 时间:2024/06/05 10:57
create or replace function RemoveSameStr(oldStr varchar2, sign varchar2)  return varchar2 is  /****************************************************  **  ** 函数名称:RemoveSameStr  ** 参    数:【名称】         【类型 】      【说明】  **           oldStr           varchar2       要处理的字符串  **           sign             varchar2       字符串分隔符  ** 返 回 值:Result           varchar2       不包含重复子串的记录  ** 摘    要:去除字符传中重复的记录  **  ** 当前版本:1.0  **  ** 作    者:HeavenBen  ** 完成日期:2015年04月09日  ** 备    注:  ****************************************************/  str          varchar2(1000);  currentIndex number;  startIndex   number;  endIndex     number;  type str_type is table of varchar2(30) index by binary_integer;  arr str_type;  Result varchar2(1000);begin  -- 空字符串  if oldStr is null then    return('');  end if;  --字符串太长  if length(oldStr) > 1000 then    return(oldStr);  end if;  str := oldStr;  currentIndex := 0;  startIndex   := 0;  loop    currentIndex := currentIndex + 1;    endIndex     := instr(str, sign, 1, currentIndex);    if (endIndex <= 0) then      exit;    end if;    arr(currentIndex) := trim(substr(str,                                     startIndex + 1,                                     endIndex - startIndex - 1));    startIndex := endIndex;  end loop;  --取最后一个字符串:  arr(currentIndex) := substr(str, startIndex + 1, length(str));  --去掉重复出现的字符串:  for i in 1 .. currentIndex - 1 loop    for j in i + 1 .. currentIndex loop      if arr(i) = arr(j) then        arr(j) := '';      end if;    end loop;  end loop;  str := '';  for i in 1 .. currentIndex loop    if arr(i) is not null then      str := str || sign || arr(i);      --数组置空:      arr(i) := '';    end if;  end loop;  --去掉前面的标识符:  Result := substr(str, 2, length(str));  return(Result);end RemoveSameStr;

0 0
原创粉丝点击