一个字符串切割PL/SQL函数 |
发布: 2007-06-06 18:45 |
最近写PL/SQL,遇到需要分割字符串的问题,没有找到已有代码,自己动手写了一个,应该。其中使用了PL/SQL几个函数,如果不理解其意义,可以查一下函数手册,有的函数的意义其实和我们的想象不同。 FUNCTION SPLIT_STR(SRC_STR IN VARCHAR2, SEP_CHAR IN VARCHAR2) RETURN NUMBER IS TYPE STRING_ARRAY IS TABLE OF VARCHAR2(60) INDEX BY BINARY_INTEGER; LSEP_COUNT NUMBER; SPLIT_ARR STRING_ARRAY; STR_LEN NUMBER; STR_TMP VARCHAR2(60); BEGIN LSEP_COUNT := 0; STR_LEN := LENGTH(SRC_STR); /* SPLIT_ARR(1) := ''; SPLIT_ARR(2) := ''; SPLIT_ARR(3) := ''; SPLIT_ARR(4) := ''; SPLIT_ARR(5) := ''; SPLIT_ARR(6) := ''; SPLIT_ARR(7) := ''; SPLIT_ARR(8) := ''; */ FOR IC IN 1 .. STR_LEN LOOP STR_TMP := SUBSTR(SRC_STR, IC); IF ASCII(STR_TMP) = ASCII(SEP_CHAR) THEN IF LENGTH(SPLIT_ARR(LSEP_COUNT + 1)) = 0 THEN NULL; ELSE LSEP_COUNT := LSEP_COUNT + 1; END IF; ELSE BEGIN IF LENGTH(SPLIT_ARR(LSEP_COUNT + 1)) = 0 THEN SPLIT_ARR(LSEP_COUNT + 1) := ''; END IF; EXCEPTION -- PL/SQL中数组初始化第一次使用到的元素 WHEN NO_DATA_FOUND THEN SPLIT_ARR(LSEP_COUNT + 1) := ''; END; SPLIT_ARR(LSEP_COUNT + 1) := CONCAT(SPLIT_ARR(LSEP_COUNT + 1), CHR(ASCII(STR_TMP))); END IF; IF LENGTH(STR_TMP) = 1 AND LENGTH(SPLIT_ARR(LSEP_COUNT + 1)) > 0 THEN LSEP_COUNT := LSEP_COUNT + 1; END IF; END LOOP; RETURN LSEP_COUNT; END; |
原文: http://qtchina.tk/?q=node/61 |
Powered by zexport
|