oracle 自定义字符串分割为数组方法

http://dusiguxia.blog.163.com/blog/static/556293162011103293991/

 

--定义数组类型
CREATE OR REPLACE TYPE splittable AS TABLE OF varchar2(100) ;
/
CREATE OR REPLACE FUNCTION split_string 
   (src VARCHAR2, delimiter varchar2) 
   --返回为上述定义的数组类型
  RETURN splittable IS 
  psrc VARCHAR2(500); 
  --定义一个数据变量
  a splittable := splittable(); 
  i NUMBER := 1; 
  j NUMBER := 1; 
BEGIN 
  --去除头和尾的delimiter
  psrc := RTrim(LTrim(src, delimiter), delimiter); 
  LOOP 
    --从左侧开始确定delimiter在psrc中从j处开始第1此出现的位置
    i := InStr(psrc, delimiter, j);  
    IF i>0 THEN 
      --扩展表结构
      a.extend; 
      a(a.Count) := Trim(SubStr(psrc, j, i-j)); 
      j := i+1; 
    END IF; 
    EXIT WHEN i=0; 
  END LOOP; 
  --把最后的字符放到数组中
  IF j < Length(psrc) THEN 
    a.extend; 
    a(a.Count) := Trim(SubStr(psrc, j, Length(psrc)+1-j)); 
  END IF; 
  RETURN a; 
END; 
/
--测试
select * from table (SPLIT_STRING('1,2,3,4',','));

posted @ 2017-09-22 10:06  老豆芽  阅读(782)  评论(0)    收藏  举报