1. 程式人生 > >ORACLE(PL/SQL) 根據字元分割(SPLIT)字串返回陣列

ORACLE(PL/SQL) 根據字元分割(SPLIT)字串返回陣列

ORACLE沒有提供現成的函式來進行字串的分割,網上有很多中現實方法,本文介紹一種我自己的實現方式。主要是使用Oracle內部函式instr和substr函式的方式來實現。

CREATE OR REPLACE FUNCTION str_split(in_str VARCHAR2,in_sep VARCHAR2)
RETURN type_split
IS
   --分割字串位置索引
   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 / YaoMing T-MAC LBJ