Oracle 超长字符串分割劈分

Oracle 超长字符串分割劈分,具体能有多长没测过,反正很大....

下面,,,,直奔主题了:

CREATE OR REPLACE FUNCTION splitstr(p_string IN clob, p_delimiter IN VARCHAR2:=',')
RETURN str_split PIPELINED
/*劈分字符串,返回结果集
 使用 select COLUMN_VALUE from table(splitstr('34324,65,gfds,yt,,')); --默认分隔符
 使用 select COLUMN_VALUE from table(splitstr('34324,65,gfds,yt,,',','));
 使用遍历 for tbl in (select * from table(splitstr('123,567,9'))) loop ... end loop;
*/
AS
  v_length NUMBER := LENGTH(p_string);
  v_start  NUMBER := 1;
  v_index  NUMBER;
  v_chars varchar(4000);--限制每行长度,方便使用
BEGIN
  WHILE(v_start <= v_length) LOOP
    v_index := INSTR(p_string, p_delimiter, v_start);
    IF v_index = 0 THEN
      v_chars:=substr(SUBSTR(p_string, v_start),1,4000);
      PIPE ROW(v_chars);
      v_start := v_length + 1;
    ELSE
      v_chars:=substr(SUBSTR(p_string, v_start, v_index - v_start),1,4000);
      PIPE ROW(v_chars);
      v_start := v_index + 1;
    END IF;
  END LOOP;
  RETURN;
END splitstr;

  返回的table 列有限制长度的,为varchar2长度限制, 方便其他操作

还有这个要定义的: CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2(32676);

在存储过程调用时,如果是参数/变量传入,不能是long类型的,否则报错,因为long类型.....就不多说了

转载记得原文链接:http://cnblogs.cn/lzpong

 

posted @ 2015-12-29 16:26  _Ong  阅读(1948)  评论(0编辑  收藏  举报