首页  ·  知识 ·  数据库
ORACLEEBS中字符串处理
网友   http://ema100.blog.sohu.com/entry/7939428/    编辑:德仔   图片来源:网络
FUNCTION GET_STRARRAYSTROFINDEX(AV_STR VARCHAR2, --要分割的字符串 nbsp
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/
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读