wyyy721 发表于 2018-9-23 11:29:58

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]
查看完整版本: oracle split函数