CREATE OR REPLACE PACKAGE PACKAGE_SPLIT IS
-- Author : EX_HUXINSHENG
-- Created : 2008-2-14 8:31:50
-- Purpose :
-- Public type declarations
TYPE TY_STR_ARRAY IS TABLE OF VARCHAR2(4000);
-- Public function and procedure declarations
/**
* @方法说明:String字符串的分拆方法,返回数组集合
* @P_STR VARCHAR2 需要分拆的字符串
* @P_DELIMITER VARCHAR2 分隔符
* @RETURN TY_STR_ARRAY 返回数组类型
*/
FUNCTION FN_SPLIT(P_STR IN VARCHAR2, P_DELIMITER IN VARCHAR2)
RETURN TY_STR_ARRAY;
/**
* @方法说明:String字符串的分拆方法,返回索引字符串
* @P_STR VARCHAR2 需要分拆的字符串
* @P_DELIMITER VARCHAR2 分隔符
* @P_INDEX INTEGER 索引下标
* @P_MSG VARCHAR2 返回相关信息
* @RETURN VARCHAR2 返回字符类型
*/
FUNCTION FN_SPLIT(P_STR IN VARCHAR2,
P_DELIMITER IN VARCHAR2,
P_INDEX IN INTEGER,
P_MSG OUT VARCHAR2) RETURN VARCHAR2;
END PACKAGE_SPLIT;
----------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY PACKAGE_SPLIT IS
/**
* @方法说明:String字符串的分拆方法,返回数组集合
* @P_STR VARCHAR2 需要分拆的字符串
* @P_DELIMITER VARCHAR2 分隔符
* @RETURN TY_STR_ARRAY 返回数组类型
*/
FUNCTION FN_SPLIT(P_STR IN VARCHAR2, P_DELIMITER IN VARCHAR2)
RETURN TY_STR_ARRAY IS
J INT := 0;
I INT := 1;
LEN INT := 0;
LEN1 INT := 0;
STR VARCHAR2(4000);
STR_ARRAY TY_STR_ARRAY := TY_STR_ARRAY();
BEGIN
LEN := LENGTH(P_STR);
LEN1 := LENGTH(P_DELIMITER);
WHILE J < LEN LOOP
J := INSTR(P_STR, P_DELIMITER, I);
IF J = 0 THEN
J := LEN;
STR := SUBSTR(P_STR, I);
STR_ARRAY.EXTEND;
STR_ARRAY(STR_ARRAY.COUNT) := STR;
IF I >= LEN THEN
EXIT;
END IF;
ELSE
STR := SUBSTR(P_STR, I, J - I);
I := J + LEN1;
STR_ARRAY.EXTEND;
STR_ARRAY(STR_ARRAY.COUNT) := STR;
END IF;
END LOOP;
RETURN STR_ARRAY;
END FN_SPLIT;
/**
* @方法说明:String字符串的分拆方法,返回索引字符串
* @P_STR VARCHAR2 需要分拆的字符串
* @P_DELIMITER VARCHAR2 分隔符
* @P_INDEX INTEGER 索引下标
* @P_MSG VARCHAR2 返回相关信息
* @RETURN VARCHAR2 返回字符类型
*/
FUNCTION FN_SPLIT(P_STR IN VARCHAR2,
P_DELIMITER IN VARCHAR2,
P_INDEX IN INTEGER,
P_MSG OUT VARCHAR2) RETURN VARCHAR2 IS
STR_ARRAY TY_STR_ARRAY;
BEGIN
STR_ARRAY:= FN_SPLIT(P_STR,P_DELIMITER);
IF P_INDEX<=STR_ARRAY.COUNT THEN
P_MSG:='找到数据,调用成功';
RETURN STR_ARRAY(P_INDEX);
ELSE
P_MSG:='数组索引越界,索引为: '||p_INDEX||' 数组大小为: '||STR_ARRAY.COUNT;
RETURN '';
END IF;
END FN_SPLIT;
END PACKAGE_SPLIT;