oracle的split函数

--创建一个type,如果为了使split函数具有通用性,请将其size 设大些。
create or replace type type_split as table of varchar2(50);
--创建function
create or replace function split(p_list varchar2, p_sep varchar2 := ',')
  return type_split pipelined is
  l_idx  pls_integer;
  v_list varchar2(50) := 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,塞北的雪',','));

COLUMN_VALUE

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

northsnow

塞北的雪

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

SQL> 


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

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

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

posted @ 2013-09-28 11:42  Cat.1988  阅读(289)  评论(0编辑  收藏  举报