首先介绍一个函数:
oracle instr函数介绍:
在Oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:
instr(sourceString,destString,start,appearPosition).
其中sourceString代表源字符串;destString代表想聪源字符串中查找的子串;start代表查找的开始位置,该参数可选的,默认为1;appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;
如果start的值为负数,那么代表从右往左进行查找。
返回值为:查找到的字符串的位置。
下面介绍拆分拆分字符串的函数 split_str:
/*
--首先要建立一个包存放返回的集合
create or replace package my_type is
--定义一个存放字符型变量的长度为100表变量filename_array
type t_ret_table is table of varchar2(100);
end my_type;
*/
-->SQL
create or replace function split_str(var_str in varchar2,
var_split in varchar2)
return my_type.t_ret_table is
/****************************************************
*
** 函数名称:split_str
** 参 数:【名称】 【类型 】 【说明】
** var_str varchar2 要拆分的字符串
** var_split varchar2 字符串分隔符
** 返 回 值:Result t_ret_table 拆分后数组集合
** 摘 要:拆分字符串
****************************************************/
var_out my_type.t_ret_table;
var_tmp varchar2(4000);
var_element varchar2(4000);
begin
var_tmp := var_str;
var_out := my_type.t_ret_table();
--如果存在匹配的分割符
while instr(var_tmp, var_split) > 0 loop
var_element := substr(var_tmp, 1, instr(var_tmp, var_split) - 1);
var_tmp := substr(var_tmp,
instr(var_tmp, var_split) + length(var_split),
length(var_tmp));
--var_out.extend(1);
var_out.extend;
var_out(var_out.count) := var_element;
end loop;
--var_out.extend(1);
var_out.extend;
var_out(var_out.count) := var_tmp;
/*
--测试
FOR i IN 1 .. var_out.count LOOP
dbms_output.put_line(var_out(i));
dbms_output.put_line('字符串长度 = '|| TO_CHAR(nvl(length(var_out(i)), 0)));
dbms_output.put_line('-----------------------------------------------');
END LOOP;
*/
return var_out;
end split_str;