ORACLE(PL/SQL) 根据字符分割(SPLIT)字符串返回数组

来源:互联网 发布:淘宝虚拟店铺 编辑:程序博客网 时间:2024/04/29 17:26

ORACLE没有提供现成的函数来进行字符串的分割,网上有很多中现实方法,本文介绍一种我自己的实现方式。主要是使用Oracle内部函数instr和substr函数的方式来实现。

CREATE OR REPLACE FUNCTION str_split(in_str VARCHAR2,in_sep VARCHAR2)RETURN type_splitIS   --分割字符串位置索引   v_sep_pos PLS_INTEGER;   --存储分割后的字符串数组   v_str_array type_split:=type_split();   --substr起始索引   v_start_idx PLS_INTEGER:=1;BEGIN   v_sep_pos:=instr(in_str,in_sep);   WHILE(v_sep_pos>0)   LOOP      v_str_array.extend;      v_str_array(v_str_array.last):=substr(in_str,v_start_idx,v_sep_pos-v_start_idx);      v_start_idx:=v_sep_pos+1;      v_sep_pos:=instr(in_str,in_sep,v_start_idx);   END LOOP;   v_str_array.extend;   v_str_array(v_str_array.last):=substr(in_str,v_start_idx,length(in_str)-v_start_idx+1);   FOR i in v_str_array.first..v_str_array.last   LOOP       dbms_output.put_line(v_str_array(i));   END LOOP;   RETURN v_str_array;END str_split;

验证测试:

SQL> set serveroutput on;SQL> SQL> DECLARE  2     v_str_array type_split;  3  BEGIN  4     v_str_array:=str_split('YaoMing#T-MAC#LBJ','#');  5     FOR i in v_str_array.first..v_str_array.last  6     LOOP  7        dbms_output.put_line(v_str_array(i));  8     END LOOP;  9  END; 10  /YaoMingT-MACLBJ
0 0
原创粉丝点击