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