代码改变世界

Oracle 拆分字符串函数

2012-10-20 14:47  Ferdinand  阅读(2626)  评论(0编辑  收藏  举报

     在将图形系统的数据保存的DCOM方式转化为数据库底层直接操作的过程中,需要保留以前的批量的插入和删除功能,这其中就会涉及到将传入的字符串进行拆分然后利用ORA 的存储过程进行批量处理。在此记录下字符串拆分函数:

   1:  create or replace function split_str(var_str   in varchar2, 
   2:                                         var_split in varchar2) 
   3:  /**************************************************** 
   4:    注意 先执行下面语句 创建类型 
   5:    create or replace type t_ret_table is table of varchar2(100)
   6:   
   7:    ** 函数名称:split_str
   8:   
   9:    ** 参    数:【名称】         【类型 】      【说明】 
  10:    **           var_str          varchar2       要拆分的字符串 
  11:    **           var_split        varchar2       字符串分隔符 
  12:    ** 返 回 值:   t_ret_table       CURSOR  拆分后数据集合 
  13:    ** 摘    要:拆分字符串
  14:   
  15:    调用 举例: 
  16:    select * from table(split_str('A-B-C','-')) 
  17:    ****************************************************/
  18:   
  19:    return t_ret_table is
  20:   
  21:    var_out     t_ret_table; 
  22:    var_tmp     varchar2(4000); 
  23:    var_element varchar2(4000);
  24:   
  25:  begin 
  26:    var_tmp := var_str; 
  27:    var_out := t_ret_table(); 
  28:    --如果存在匹配的分割符 
  29:    while instr(var_tmp, var_split) > 0 loop 
  30:      var_element := substr(var_tmp, 1, instr(var_tmp, var_split) - 1); 
  31:      var_tmp     := substr(var_tmp, 
  32:                            instr(var_tmp, var_split) + length(var_split), 
  33:                            length(var_tmp)); 
  34:      --var_out.extend(1); 
  35:      var_out.extend;
  36:   
  37:      --重新设置var_element值 
  38:      var_element:=substr(var_element,instr(var_element,'>',1)+1); 
  39:      var_out(var_out.count) := var_element;
  40:   
  41:      --打印 
  42:      --SET SERVEROUT ON; 
  43:      DBMS_OUTPUT.PUT_LINE(var_element); 
  44:      --打印
  45:   
  46:    end loop;
  47:   
  48:    --var_out.extend(1); 
  49:    var_out.extend; 
  50:    var_out(var_out.count) := var_tmp;
  51:   
  52:    return var_out; 
  53:  end split_str;