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