一个字符串切割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