oracle split函数

    前几天项目加班,突然需要在Oracle中进行split操作。当时因为种种原因没搞定。   今天突然想起来了,决定自己写一个。   直接上代码。  

    1.首先定义一个Conllection. 

     create or replace type varchar2_array is table of varchar2(200);

     2.split函数代码如下:

    create or replace function f_tool_split

(

    str_i_input   in varchar2,

    str_i_spliter in varchar2

)return varchar2_array

is

    arr_o_result    varchar2_array := varchar2_array();   --分割结果

    str_l_input     varchar2(4000);                       --将输入的字符串,去掉前后的空格

    --str_l_element   varchar2(4000);                       --分割后的元素

    i_l_onset       integer := 1;                         --查找分割元素起始位置

    i_l_length      integer;                              --分割字符串的长度

    i_l_split_index integer;                              --分割字符的下标位置

    i_l_count       integer := 1;                         --元素计数

begin

    --参数验证

    if (str_i_input is null or '' = str_i_input) then

        return arr_o_result;

    end if;

    

    if (str_i_spliter is null or  '' = str_i_spliter) then

        return arr_o_result;

    end if;

    

    --将待分割字符串去掉前后的空格

    str_l_input := trim(str_i_input);

    

    --分割字符串的长度

    i_l_length := length(str_i_spliter);

    

    loop

        --首先将数组容量扩充一个位置

        arr_o_result.extend(1);

        

        i_l_split_index := instr(str_l_input, str_i_spliter, i_l_onset, 1);

        

        --当i_l_split_index为0是表示没有找到分割符号

        if (0 = i_l_split_index) then

            --i_l_count为1表示没有找到分割符号

            if (1 = i_l_count) then

                arr_o_result(i_l_count) := str_l_input;

            --最后一个分割符到字符结尾的内容

            else

                arr_o_result(i_l_count) := substr(str_l_input, i_l_onset);

            end if;

            

            exit;

        else

            arr_o_result(i_l_count) := substr(str_l_input, i_l_onset, i_l_split_index - i_l_onset);

        end if;

        

        --下次查找起始位置

        i_l_onset := i_l_split_index + i_l_length;

        i_l_count := i_l_count + 1;

    end loop;

    

    return arr_o_result;

exception

    when others then

      return arr_o_result;

end f_tool_split;

猜你喜欢

转载自yangsj19870829.iteye.com/blog/1897332