select * from table(fun_strsplit('1,2,3,4,5'));

1、创建一个类型

CREATE OR REPLACE TYPE Strsplit_Type IS TABLE OF VARCHAR2(4000)

2、创建函数

CREATE OR REPLACE FUNCTION Fun_Strsplit(p_Value VARCHAR2,
p_Split VARCHAR2 := ',')
--usage: select * from table(fun_strsplit('1,2,3,4,5'))
RETURN Strsplit_Type
PIPELINED IS
v_Idx INTEGER;
v_Str VARCHAR2(500);
v_Strs_Last VARCHAR2(4000) := p_Value; BEGIN
LOOP
v_Idx := Instr(v_Strs_Last, p_Split);
EXIT WHEN v_Idx = 0;
v_Str := Substr(v_Strs_Last, 1, v_Idx - 1);
v_Strs_Last := Substr(v_Strs_Last, v_Idx + 1);
PIPE ROW(v_Str);
END LOOP;
PIPE ROW(v_Strs_Last);
RETURN; END Fun_Strsplit;

我本想把这个函数用在大批量数据处理中,后来发现写在sql中会导致性能慢很多倍,因为方法中有循环

例:

假如每行数据中需要用split循环8次,split(1,2,3,4,5,6,7,8)

split前 1W行 2秒  用split后 1W行 2*8=16秒

split前 100W行 100秒 用split后 100W行 100*8=800秒 比之前多了700秒

我这里的比喻不一定准确,我只是认为大数据量千万别用循环嵌套在里面,数据量越大损耗越多。

oracle split的更多相关文章

  1. pipe row的用法, Oracle split 函数写法.

    为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...

  2. Oracle Split Partitions

    1. 创建分离分区的存储过程 CREATE OR REPLACE Procedure SP_Split_Partition( v_table_name_in in varchar2, v_part_n ...

  3. Oracle Split 函数

    为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...

  4. Oracle split分区表引起ORA-01502错误

    继上次删除分区表的分区遇到ORA-01502错误后[详细见链接:Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态],最近在split分区的时候又遇到了这个问题 ...

  5. (转)pipe row的用法, Oracle split 函数写法.

    本文转载自:http://www.cnblogs.com/newsea/archive/2010/12/14/1905482.html 关于 pipe row的用法2009/12/30 14:53 = ...

  6. oracle split 以及 简单json解析存储过程

    BEGIN; 由于之前工作上需要在oracle中做split功能以及json格分解.然后经过一番google和优化整合,最后整理到一个存储过程包中,易于管理,代码如下: 1.包定义: CREATE O ...

  7. Oracle Split字符串

    为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...

  8. oracle split函数

    PL/SQL 中没有split函数,需要自己写. 代码: ); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些. --创建function create or r ...

  9. Oracle间隔(interval)分区

    (一)什么是间隔分区 间隔分区是Oracle 11.1引入的新功能,通过该功能,可以在输入相应分区的数据时自动创建相应的分区.在没有间隔分区技术之前,DBA通常会创建一个maxvalue分区以避免OR ...

随机推荐

  1. java反射生成ORM

    package com.wzh.jdbc; import java.lang.reflect.Field;import java.sql.Connection;import java.sql.Prep ...

  2. iOS 批量打包--Shell脚本

    由于公司有批量打包的需要,只是渠道号不一样,网上搜索一番,大致有两个方式:a) 从源程序一次性打出所有渠道的ipa包,大概的思路就是利用脚本循环执行打包过程,而每次打包前都通过脚本修改项目中存放渠道号 ...

  3. 给a标签herf属性赋值时,必须加http://

    新建一个web工程,FirstWeb,在其中新建一个页面:test.jsp <%@ page language="java" contentType="text/h ...

  4. HTTP权威指南之连接管理

    TCP连接世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的, TCP/IP 是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集. 客户端应用程序可以打开一条 TCP/IP 连 ...

  5. java selenium 项目环境搭建(一)

    1.使用jdk1.7版本.jdk下载,请再百度输入 jdk 1.7下载,环境配置参考

  6. 交易Txt文件导出

    private void writeFYFileToTxt(List list, HttpServletRequest request, String drxh, FileOutputStream f ...

  7. Html5——WEB(客户端)数据存储

    在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...

  8. MFC学习 修改窗口样式

    1. 在PreCreateWindow中可用CREATESTRUCT cs, cs.lpszName修改窗口标题, cs.lpszClass = AfxRegisterWndClass 修改图标与样式 ...

  9. awk 解析maps文件中的地址

    maps文件一般是这个样子: pi@raspberrypi:~ $ sudo cat /proc//maps 54b88000-54c8d000 r-xp b3: /lib/systemd/syste ...

  10. linux下OpenCV的安装配置

    1 安装cmake及一些依赖库 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavc ...