FUNCTION GET_STRARRAYSTROFINDEX(AV_STR VARCHAR2, --要分割的字符串
AV_SPLIT VARCHAR2, --分隔符号
AV_INDEX NUMBER --取第几个元素
) RETURN VARCHAR2 IS
LV_STR VARCHAR2(2024);
LV_STROFINDEX VARCHAR2(2024);
LV_LENGTH NUMBER;
BEGIN
LV_STR := LTRIM(RTRIM(AV_STR));
LV_STR := CONCAT(LV_STR, AV_SPLIT);
LV_LENGTH := AV_INDEX;
IF LV_LENGTH = 0 THEN
LV_STROFINDEX := SUBSTR(LV_STR,
1,
INSTR(LV_STR, AV_SPLIT) - LENGTH(AV_SPLIT));
ELSE
LV_LENGTH := AV_INDEX + 1;
LV_STROFINDEX := SUBSTR(LV_STR,
INSTR(LV_STR, AV_SPLIT, 1, AV_INDEX) +
LENGTH(AV_SPLIT),
INSTR(LV_STR, AV_SPLIT, 1, LV_LENGTH) -
INSTR(LV_STR, AV_SPLIT, 1, AV_INDEX) -
LENGTH(AV_SPLIT));
END IF;
RETURN LV_STROFINDEX;
END GET_STRARRAYSTROFINDEX;
FUNCTION GET_RESULT_STRING(P_STRING IN VARCHAR2, P_ORG_ID IN VARCHAR2)
RETURN VARCHAR2 IS
V_RESULT_STRING VARCHAR2(2024);
V_OWNER VARCHAR2(20);
FLAG_STRING_NUMBER NUMBER;
STRING_LENGTH NUMBER;
I NUMBER;
CURSOR C_L(P_L IN VARCHAR2) IS
SELECT DISTINCT ATTRIBUTE1
FROM HR_ORGANIZATION_UNITS_V T
WHERE ATTRIBUTE1 LIKE '%' || P_L || '%';
BEGIN
SELECT ATTRIBUTE1
INTO V_OWNER
FROM HR_ORGANIZATION_UNITS_V A
WHERE A.ORGANIZATION_ID = P_ORG_ID;
SELECT NVL((LENGTH(P_STRING) - LENGTH(REPLACE(P_STRING, ',', ''))), 0)
INTO FLAG_STRING_NUMBER
FROM DUAL;
I := 0;
FOR J IN 0 .. FLAG_STRING_NUMBER LOOP
SELECT LENGTH(QFA_COMMON_PKG.GET_STRARRAYSTROFINDEX(P_STRING, ',', I))
INTO STRING_LENGTH
FROM DUAL;
IF STRING_LENGTH <= 4 THEN
FOR C_DEL IN C_L(QFA_COMMON_PKG.GET_STRARRAYSTROFINDEX(P_STRING,
',',
I)) LOOP
V_RESULT_STRING := V_RESULT_STRING || C_DEL.ATTRIBUTE1 || ',';
END LOOP;
ELSE
V_RESULT_STRING := V_RESULT_STRING ||
QFA_COMMON_PKG.GET_STRARRAYSTROFINDEX(P_STRING,
',',
I) || ',';
END IF;
I := I + 1;
END LOOP;
IF INSTR(V_RESULT_STRING, V_OWNER, 1, LENGTH(V_OWNER)) = 0 THEN
V_RESULT_STRING := V_RESULT_STRING || V_OWNER || ',';
END IF;
RETURN V_RESULT_STRING;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END GET_RESULT_STRING;
本文作者:网友 来源: http://ema100.blog.sohu.com/entry/7939428/