PL/SQL 中没有split函数,需要自己写。

  1. create or replace type type_split as table of varchar2(50); --创建一个  type  ,如果为了使split函数具有通用性,请将其size 设大些。  
  2.  
  3.  
  4.  
  5. --创建function  
  6.  
  7. create or replace function split  
  8.  
  9. (  
  10.  
  11. p_list varchar2,  
  12.  
  13. p_sep varchar2 := ',' 
  14.  
  15. return type_split pipelined  
  16.  
  17. is 
  18.  
  19. l_idx pls_integer;  
  20.  
  21. v_list varchar2(50) := p_list;  
  22.  
  23. begin 
  24.  
  25.   loop  
  26.  
  27.     l_idx := instr(v_list,p_sep);  
  28.  
  29.     if l_idx > 0 then 
  30.  
  31.       pipe row(substr(v_list,1,l_idx-1));  
  32.  
  33.       v_list := substr(v_list,l_idx+length(p_sep));  
  34.  
  35.     else 
  36.  
  37.       pipe row(v_list);  
  38.  
  39.       exit;  
  40.  
  41.     end if;  
  42.  
  43.   end loop;  
  44.  
  45.   return;  
  46.  
  47. end split;  
  48.  

 

测试:

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