|
PL/SQL 中没有split函数,需要自己写。
- create or replace type type_split as table of varchar2(50); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些。
- --创建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('1234.56789', ','));
COLUMN_VALUE
--------------------------------------------------
1234
56789
SQL>
COMMENTS:
-----PIPELINED
pipelined声名此function是pipe的,如果这么声名了,就必须使用pipe row的方式把数据返回,常规函数最后的"return 变量",就变成了"return".
----pipe row
pipelined的function主要是为了提高效率,不用等所有的数据都处理完成了才返回客户端,它是边处理边返回.适用于大数据量的交互.
|
|
|