[转]oracle的split函数

PL/SQL 中没有split函数,需要自己写。

  代码:

 

create or replace type type_split as table of varchar2(4000);  --创建一个  type  ,如果为了使split函数具有通用性,请将其size 设大些。

--创建function

create or replace function split

(

   p_list varchar2,

   p_sep varchar2 := ','

扫描二维码关注公众号,回复: 1313565 查看本文章

)  return type_split pipelined

 is

   l_idx  pls_integer;

   v_list  varchar2(4000) := 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 t.column_value col from table(split('northsnow,塞北的雪',',')) t;

COL

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

northsnow

塞北的雪

SQL> 


补充: 
-----PIPELINED关键字是什么意思? 
---- pipe row是什么意思?

pipelined声名此function是pipe的,如果这么声名了,就必须使用pipe row的方式把数据返回,常规函数最后的"return 变量",就变成了"return". 

pipelined的function主要是为了提高效率,不用等所有的数据都处理完成了才返回客户端,它是边处理边返回.适用于大数据量的交互. 

猜你喜欢

转载自liumiao2011.iteye.com/blog/1826147