oracle split
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的更多相关文章
- pipe row的用法, Oracle split 函数写法.
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- Oracle Split Partitions
1. 创建分离分区的存储过程 CREATE OR REPLACE Procedure SP_Split_Partition( v_table_name_in in varchar2, v_part_n ...
- Oracle Split 函数
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- Oracle split分区表引起ORA-01502错误
继上次删除分区表的分区遇到ORA-01502错误后[详细见链接:Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态],最近在split分区的时候又遇到了这个问题 ...
- (转)pipe row的用法, Oracle split 函数写法.
本文转载自:http://www.cnblogs.com/newsea/archive/2010/12/14/1905482.html 关于 pipe row的用法2009/12/30 14:53 = ...
- oracle split 以及 简单json解析存储过程
BEGIN; 由于之前工作上需要在oracle中做split功能以及json格分解.然后经过一番google和优化整合,最后整理到一个存储过程包中,易于管理,代码如下: 1.包定义: CREATE O ...
- Oracle Split字符串
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- oracle split函数
PL/SQL 中没有split函数,需要自己写. 代码: ); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些. --创建function create or r ...
- Oracle间隔(interval)分区
(一)什么是间隔分区 间隔分区是Oracle 11.1引入的新功能,通过该功能,可以在输入相应分区的数据时自动创建相应的分区.在没有间隔分区技术之前,DBA通常会创建一个maxvalue分区以避免OR ...
随机推荐
- linux命令(13) 删除指定文件夹下后缀名相同的文件
方法一: find 目录 -name "*.abc" | xargs rm命令有点危险,可以先执行前半段,看看是不是你要删除的文件, 然后再整条执行 方法二:find . -nam ...
- websphere应用程序的使用
1.服务器板块 1.1 jvm虚拟机的通用参数: agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777Dcom.ibm.w ...
- 通过IP连接网上打印机(转载)
From:http://zhidao.baidu.com/link?url=YZzFWur4-UZrNEobHv9zTkbYocMAjKkCq0LBj1QjJ6wApUT7MljxoD8JMBREUH ...
- PHP 连接 MSSQL
1 设置 2 php 代码: <?php header('Content-Type:text/html; charset=GBK'); define('DB_HOST','localhost') ...
- SQL 引用 webservice
sp_configure 'show advanced options', 1;GORECONFIGURE;GOsp_configure 'Ole Automation Procedures', 1; ...
- java GUI之基本图形
1.为了支持图形用户界面程序设计,java1.0的标准类库中包含一个抽象窗口工具箱(Abstract Window Toolkit,AWT). 这个工具箱极不成熟,其编程模型也不是面向对象的,有很大的 ...
- 彻底删除mysql服务
http://wenku.baidu.com/link?url=XEOFkNXElJV6FoBDOs7m7BlDUv9-ZuLbRbeVwbMa7AXa8ukZ6oIpiYYy3gNnITmP911M ...
- NYOJ 51-管闲事的小明
点击打开链接 管闲事的小明 时间限制:4000 ms | 内存限制:65535 KB 难度:2 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数 ...
- java整数类型
1.整数类型:byte占8位,short 占16位,int占32位,long占64位. 2.对于long类型的值,若赋值给的值大于int类型的最大值或小于int型的最小值,则需要在数字后加L或l,表示 ...
- Oracle 版本历史
1.数据库在项目开发里面,大多数都使用Oracle,什么8i,9i,10G,11g等,一直认为数据库版本的升级对于开发一个系统的开发人员来书,不是什么重要的事,我仅仅关注数据库的表结构以及存储过程或者 ...