1. 程式人生 > >ORACLE 中字串轉換為陣列的函式方法

ORACLE 中字串轉換為陣列的函式方法

CREATE OR REPLACE TYPE splitArray AS TABLE OF VARCHAR2(2048); --------字串拆分函式 CREATE OR REPLACE FUNCTION fu_split_Array (      str IN VARCHAR2,--輸入的字串      split_param IN VARCHAR2 --拆分的引數 ) RETURN splitArray        IS    split_array  splitArray := splitArray();--定義拆分陣列    t_temp VARCHAR2(2048);    t_begin number :=0;--迴圈變數開始引數    t_end number := 1;--擷取字元長度的開始位置結束引數    t_length number :=0;--字串的長度    t_paramLength number :=0;--傳入字串擷取引數的長度 BEGIN   t_length := length(str);--獲取傳入字元的長度   t_paramLength := length(split_param);--擷取引數的長度   --在temp 變數中查詢 split_param 檢索當前split_param字串的位置 如果沒有找到則返回0     WHILE  t_begin < t_length  LOOP       dbms_output.put_line('擷取='||t_begin);       --起始位置從1開始擷取匹配split_param字串並返回他所在的位置       t_begin := instr(str,split_param,t_end);        /* IF t_begin = 0 THEN           Dbms_Output.put_line('見到了');             t_begin := t_length;             t_temp := SUBSTR (str, t_end);             split_array.extend;             split_array (split_array.count) := str;             IF t_end >= t_length             THEN              Dbms_Output.put_line('見到了11111111111');                 EXIT;             END IF;         ELSE*/

        --判斷當前是否長度超出原字串長度 如果超出則不執行             IF t_end >= t_length             THEN              --Dbms_Output.put_line('見到了11111111111');                 EXIT;             END IF;             t_temp := SUBSTR(str,t_end,t_begin-t_end);             --dbms_output.put_line(t_temp);             t_end := t_begin+t_paramLength;             split_array.extend;             split_array(split_array.count) := t_temp;
        /*END IF;*/       END LOOP;     RETURN split_array; END fu_split_Array;

--測試

SELECT fu_split_Array('A,B,C,D,E,',',') FROM DUAL;

備註 :如果你的字串最後一位含有分隔符例如“,”之類的標示 則使用紅色未註釋部分

如果你的字串最後一位沒有標記 則使用橘色註釋部分程式碼 則返回所有的字串你就需要重新擷取最後一位了目前

我只瞭解這些 還在測試階段 完善了全部黏貼出來 謝謝!希望對您有幫助!