程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 數據庫存儲過程 ,去除給定字符串中重復的字符串

數據庫存儲過程 ,去除給定字符串中重復的字符串

編輯:Oracle數據庫基礎
下函數是本人在編寫Oracle數據庫存儲過程時寫的函數,覺得該函數通用性較強,因此發表出來供需要的人參考.

這個函數的功能主要是用於去除給定字符串中重復的字符串.在使用中需要指定字符串的分隔符.示例:
str := MyReplace(''13,14,13,444'', '','');
輸出:
13,14,444

create or replace function MyReplace(oldStr varchar2, sign varchar2) return varchar2 is
  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;
 
  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 MyReplace; 
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved