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;