一个用作撕碎字符串的PL/SQL工具函数(Oracle 10g)

create or replace function f_tool_splt2arr(p_src     in varchar2,
                                           p_sub     in varchar2 default ',',
                                           p_regflag in number default 0)
  return dbms_utility.lname_array is
  /***********************************************************************
  将字符串撕成碎片,以数组的形式返回,支持正则表达式方式撕碎
  作者:xxx
  日期:2012年6月20日
  参数:
         in
         	 p_src       输入的待撕碎字符串           
           p_sub       用于撕碎的定位子串
           p_regflag   是否启用正规表示式方式撕碎,0_不启用,1_启用
   返回值:
           v_retarr    返回撕碎后的数组,可用作调用者迭代           
  ***********************************************************************/
  v_retarr dbms_utility.lname_array;
  c_pos    number := 0;
  p_pos    number := 1;
  ind      number := 1;
begin
  if p_regflag = 0 then
    while instr(p_src, p_sub, p_pos, 1) > 1 loop
      c_pos := instr(p_src, p_sub, p_pos, 1);
      v_retarr(ind) := substr(p_src,
                              p_pos,
                              c_pos - p_pos - length(p_sub) + 1);
      p_pos := c_pos + length(p_sub);
      ind := ind + 1;
    end loop;
    v_retarr(ind) := substr(p_src, p_pos);
  else
    while regexp_instr(p_src, p_sub, p_pos, 1, 0) > 1 loop
      c_pos := regexp_instr(p_src, p_sub, p_pos, 1, 0);
      v_retarr(ind) := substr(p_src, p_pos, c_pos - p_pos);
      p_pos := regexp_instr(p_src, p_sub, p_pos, 1, 1);
      ind := ind + 1;
    end loop;
    v_retarr(ind) := substr(p_src, p_pos);
  end if;
  return v_retarr;
end f_tool_splt2arr;

调用示例

declare
  a dbms_utility.lname_array;
begin
  a := f_tool_splt2arr('abc123sdjfk88dkjff9kjkj123123mmmm','[0-9]+',1);
  for i in a.first .. a.last loop
    dbms_output.put_line(i);
    dbms_output.put_line(a(i));
  end loop;
end;



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值