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主要是为了提高效率,不用等所有的数据都处理完成了才返回客户端,它是边处理边返回.适用于大数据量的交互.