Orcale分割字串返回数组

定义一个数组,元素是长度小于100字符的字串
TYPE str_array IS TABLE OF varchar(100);
定义一个数组,元素是长度小于100字符的字串
type arrays is table of varchar2(200);
declare
str_array array;
begin
str_array(1)='A0001';
str_array.extends(1);
str_array(str_array.count)='A0002';(=str_array(2)='A0002')
end;
分割字串返回数组
/*
用指定字符将字符串分隔为数组
str 字符串
str_split 分割字符
return 分割后的数组
*/
function splitString(sourceString varchar2,splitFlag varchar2)
return arrays
is
dataList arrays:=arrays();--数组定义
temp varchar2(200);--存储临时数据
tempSource varchar2(200):=sourceString;--存储需要分割的字符串
splitIndex number(2);--分隔符在字符串中首次出现的位置
splitLength number(2):=length(splitFlag);--分割符长度
begin
while instr(tempSource,splitFlag)>0 loop
splitIndex := instr(tempSource,splitFlag);
--取出第一个分割符前的字符串
temp := substr(tempSource,1,splitIndex-splitLength);
--减去第一个分隔符前的字符串
tempSource := substr(tempSource,splitIndex+splitLength,length(tempSource));
if temp is not null then
dataList.extend(1);
dataList(dataList.count) := temp;
end if;
end loop;
if tempSource is not null then
dataList.extend(1);
dataList(dataList.count) := tempSource;
end if;
return dataList;
end splitString; 

 

 

字符串分割
create or replace FUNCTION         CHAR_SPLIT
(INPUT in varchar2, SPLIT_CHAR in varchar2 default ',')
return CHAR_TABLE as
str long default INPUT||SPLIT_CHAR;
n number;
OUPUT CHAR_TABLE:=CHAR_TABLE();
begin
  loop
  n := instr(str,SPLIT_CHAR );
  exit when (nvl(n,0) = 0);
    OUPUT.extend;
    OUPUT(OUPUT.count):= ltrim(rtrim(substr(str,1,n-1)));
    str:= substr(str, n+length(SPLIT_CHAR) );
  end loop;
  --dbms_output.PUT_LINE(OUPUT.count);
  return OUPUT;
end;

Oracle自定义函数之二:列数据合并成字符串
 create or replace FUNCTION SUMSTR(COL VARCHAR2,SQLSTR VARCHAR2) RETURN VARCHAR2
IS
TMP_SUM VARCHAR2(100);
NEWSTR VARCHAR2(2000);
TYPE MYCURSOR IS REF CURSOR;
C1 MYCURSOR;
BEGIN
  OPEN C1 FOR SQLSTR;
  LOOP
  FETCH C1 INTO TMP_SUM;
  EXIT WHEN C1%NOTFOUND;
  NEWSTR:=NEWSTR||TMP_SUM||',';
  END LOOP;
  CLOSE C1;
  NEWSTR:= substr(NEWSTR,0,length(NEWSTR)-1);
  RETURN NEWSTR;
END;

posted @ 2009-03-12 19:01  Jinny  阅读(754)  评论(0编辑  收藏  举报