oracle 逗號分隔存儲過程 函數 字符串分割


方法一:

create or replace type tab_split_list is table of varchar2(200);  --創建變量

/******************************************************************************

   --       工具類

           分割字符串 調用方法例如

            SELECT COLUMN_VALUE AS a FROM  TABLE(get_split_lists('25#1','#'));

   --     輸入參數:

   --           i_date

   --     輸出參數

   --       o_retCode    返回標志位

   --       totalNum     返回總條數

   -- REVISIONS:

   --    Ver           Date            Author                 Description

   -- ---------      ----------      ----------        --------------------------

   --   1.0         2015-04-21        jiajitao              create this procedure.

  ******************************************************************************/

  FUNCTION  get_split_lists(i_str varchar2,i_delimiter varchar2) RETURN tab_split_list IS

   v_list tab_split_list;

   begin

 

 

   SELECT  aa.s  BULK COLLECT INTO v_list FROM(

                SELECT REGEXP_SUBSTR(ONAME, '[^'||i_delimiter||']+', 1, ROWNUM) AS s

                  FROM (SELECT i_str AS ONAME FROM DUAL)

                CONNECT BY ROWNUM <=LENGTH(REGEXP_REPLACE(ONAME, '[^'||i_delimiter||']+')) + 1

   ) aa WHERE aa.s IS NOT NULL;

 

   RETURN v_list;

 END get_split_lists;

方法二

 

--創建變量
CREATE OR REPLACE TYPE "ARRYTYPE1" IS VARRAY(10000) OF VARCHAR(2000);

 

 

--創建函數

CREATE OR REPLACE FUNCTION FUNC_ISM_GETSPLITSTR (
in_str IN VARCHAR2, --需分割的字符串
in_split IN VARCHAR2 --分隔符
)
RETURN arrytype1
AS
v_count1 INTEGER;
v_count2 INTEGER;
v_strlist arrytype1;
v_node VARCHAR2 (2000);
BEGIN
v_count2 := 0;
v_strlist := arrytype1 ();

 

IF (in_str IS NULL) OR (LENGTH (in_str) <= 0)
THEN
RETURN NULL;
END IF;

 

FOR v_i IN 1 .. LENGTH (in_str)
LOOP
v_count1 := INSTRB (in_str, in_split, 1, v_i);
v_count2 := INSTRB (in_str, in_split, 1, v_i + 1);
v_node := SUBSTRB (in_str, v_count1 + 1, v_count2 - v_count1 - 1);

 

IF v_node IS NULL
THEN
v_node := '';
END IF;

 

IF (v_count2 = 0) OR (v_count2 IS NULL)
THEN
EXIT;
ELSE
v_strlist.EXTEND ();
v_strlist (v_i) := v_node;
v_node := '';
END IF;
END LOOP;

 

RETURN v_strlist;

 

END FUNC_ISM_GETSPLITSTR;

 

 

--測試

 

 


SELECT * FROM TABLE( FUNC_ISM_GETSPLITSTR('_FUNC_CTP_LG_GEsss_s_ssssTSPNG_', '_'));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM