Oracle 超长字符串分割劈分
2015-12-29 16:26
477 查看
Oracle 超长字符串分割劈分,具体能有多长没测过,反正很大....
下面,,,,直奔主题了:
返回的table 列有限制长度的,为varchar2长度限制, 方便其他操作
还有这个要定义的: CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2(32676);
在存储过程调用时,如果是参数/变量传入,不能是long类型的,否则报错,因为long类型.....就不多说了
转载记得原文链接:http://cnblogs.cn/lzpong
下面,,,,直奔主题了:
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
相关文章推荐
- oracle笔记整理3——commit,rollback,flashback
- oracle笔记整理2——redo与undo
- Oracle 11g 生产大量的Trace 文件
- oracle笔记整理1——数据库结构
- oracle存储过程里的ifelse语句这样写,想想也是醉了
- Oracle排名函数(Rank)实例详解
- oracle数据库OracleDBconsole服务无法启动的原因及其解决思路
- [Oracle] CPU/PSU补丁安装详细教程
- 学习笔记(一) Oracle启动、关闭过程解析
- oracle 数据库
- Oracle11g在用EXP 导出时,空表不能导出解决
- oracle常用系统表
- ORACLE PL/SQL编程-触发器
- Oracle 数据泵导入导出
- Oracle 11g R2 RAC删除一节点过程
- MySQL实现类似Oracle中start with功能
- oracle监听
- oracle扩展表空间的三种方法
- Ubuntu Linux下安装Oracle JDK
- DMP导入导出