Oracle Str Split Function

create or replace type tb_strSplit  as table of varchar2(4000);

create or replace function to_table(pv_str varchar2,pv_split varchar2) return tb_strSplit
as
  ltab tb_strSplit := tb_strSplit();
  pos integer := 0;
  ls varchar2(4000) := pv_str;
begin
  pos := instr(ls,pv_split);
  while pos > 0 loop
    ltab.extend;
    ltab(ltab.count) := substr(ls,1,pos - 1);
    ls := substr(ls,pos + length(pv_split));
    pos := instr(ls,pv_split);
  end loop;
  ltab.extend;
  ltab(ltab.count) := ls;
  return ltab;
end;


set serverout on
declare
aa tbl_str;
begin
aa := to_table('a|||b|||c','|||');
for i in 1..aa.count loop
        dbms_output.put_line(aa(i));
end loop;
end;
/

----------------------------------------------------------

CREATE OR REPLACE function strToTb(inVStr in string,inStrSplit in varchar) return tb_strSplit PIPELINED
as
v_tmp varchar2(4000);
v_element varchar2(4000);
begin

v_tmp := inVStr;
while instr(v_tmp,inStrSplit)>0 loop
   v_element := substr(v_tmp,1,instr(v_tmp,inStrSplit)-1);
   v_tmp := substr(v_tmp,instr(v_tmp,inStrSplit)+length(inStrSplit),length(v_tmp));
   pipe row(v_element);
end loop;

pipe row(v_tmp);

return;
end strToTb;
/

select * from table(strToTb('a|||b|||c','|||'));

 

------------------------------------------------------------------------------------------------------------------------------------------------------

create or replace type type_split as table of varchar2(300); 

--create function

create or replace function split

(

   p_list varchar2,

   p_sep varchar2 := ' '

)  return type_split pipelined

 is

   l_idx  pls_integer;

   v_list  varchar2(30) := p_list;

begin

   loop

      l_idx := instr(v_list,p_sep);

      if l_idx > 0 then

          pipe row(substr(v_list,1,l_idx-1));

          v_list := substr(v_list,l_idx+length(p_sep));

      else

          pipe row(v_list);

          exit;

      end if;

   end loop;

   return;

end split;
/

 

 SQL> select * from table(split('northsnow,hell',','));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值