oracle | 字符串分割函数

/**
 * 字符串分割函数.
 * @param P_STR 待分割的字符串
 * @param 分隔符
 * @return 自定义table类型TY_STR_SPLIT.
 * 使用方法 select column_value from table(fn_split('1,2',','))
 * @Author: xDer
 */
CREATE OR REPLACE FUNCTION FN_SPLIT(P_STR       IN VARCHAR2,
                                    P_DELIMITER IN VARCHAR2)
  RETURN TY_STR_SPLIT IS
  J         INT := 0;
  I         INT := 1;
  LEN       INT := 0;
  LEN1      INT := 0;
  STR       VARCHAR2(4000);
  STR_SPLIT TY_STR_SPLIT := TY_STR_SPLIT();
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_SPLIT.EXTEND;
      STR_SPLIT(STR_SPLIT.COUNT) := STR;

      IF I >= LEN THEN
        EXIT;
      END IF;
    ELSE
      STR := SUBSTR(P_STR, I, J - I);
      I   := J + LEN1;
      STR_SPLIT.EXTEND;
      STR_SPLIT(STR_SPLIT.COUNT) := STR;
    END IF;
  END LOOP;

  RETURN STR_SPLIT;
END FN_SPLIT;

  

/** * 字符串分割函数. * @param P_STR 待分割的字符串 * @param 分隔符 * @return 自定义table类型TY_STR_SPLIT. * 使用方法 select column_value from table(fn_split('1,2',',')) * @Author: xDer */CREATE OR REPLACE FUNCTION FN_SPLIT(P_STR       IN VARCHAR2,                                    P_DELIMITER IN VARCHAR2)  RETURN TY_STR_SPLIT IS  J         INT := 0;  I         INT := 1;  LEN       INT := 0;  LEN1      INT := 0;  STR       VARCHAR2(4000);  STR_SPLIT TY_STR_SPLIT := TY_STR_SPLIT();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_SPLIT.EXTEND;      STR_SPLIT(STR_SPLIT.COUNT) := STR;
      IF I >= LEN THEN        EXIT;      END IF;    ELSE      STR := SUBSTR(P_STR, I, J - I);      I   := J + LEN1;      STR_SPLIT.EXTEND;      STR_SPLIT(STR_SPLIT.COUNT) := STR;    END IF;  END LOOP;
  RETURN STR_SPLIT;END FN_SPLIT;

posted @ 2016-01-22 21:10  xder  阅读(730)  评论(0编辑  收藏  举报