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秒

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

最新文章

  1. Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法
  2. [css3]跑马灯
  3. python day1 常用模块
  4. Flex知识备忘
  5. ThinkPHP之项目搭建
  6. PostgreSQL Replication之第十章 配置Slony(1)
  7. Oracle-记录学习
  8. 编译安装-Nginx
  9. 小凡的Linux主机与时间服务器同步记录
  10. iOS: 属性声明strong和retain竟然不一样
  11. Android SDK下载技巧
  12. linux nVidia driver 304 319 . installation by hand
  13. 生产环境中使用Docker Swarm的一些建议
  14. 【BZOJ1095】捉迷藏(动态点分治)
  15. T-SQL动态查询(1)——简介
  16. c/c++ 继承与多态 静态调用与动态调用
  17. 【PS技巧】如何校正倾斜的图片
  18. vmware不能装ghost系统怎么解决
  19. unity中的透视投影矩阵
  20. CSS-网站导航栏标题之间的分隔符

热门文章

  1. nginx优化配置
  2. Eclipse下快速打开本地文件插件EasyExplorer(转)
  3. Python基础05 缩进和选择
  4. fatal error C1853: '*.pch' is not a precompiled header file created with this compile
  5. c#内置颜色大全
  6. Windows和Linux环境下Memcached安装与配置(转)
  7. C++学习5
  8. spring整合struts
  9. [ActionScript 3.0] LocalConnection示例
  10. 为什么老师不喜欢RelativeLayout