oracle split
2024-10-17 22:31:10
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秒
我这里的比喻不一定准确,我只是认为大数据量千万别用循环嵌套在里面,数据量越大损耗越多。
最新文章
- Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法
- [css3]跑马灯
- python day1 常用模块
- Flex知识备忘
- ThinkPHP之项目搭建
- PostgreSQL Replication之第十章 配置Slony(1)
- Oracle-记录学习
- 编译安装-Nginx
- 小凡的Linux主机与时间服务器同步记录
- iOS: 属性声明strong和retain竟然不一样
- Android SDK下载技巧
- linux nVidia driver 304 319 . installation by hand
- 生产环境中使用Docker Swarm的一些建议
- 【BZOJ1095】捉迷藏(动态点分治)
- T-SQL动态查询(1)——简介
- c/c++ 继承与多态 静态调用与动态调用
- 【PS技巧】如何校正倾斜的图片
- vmware不能装ghost系统怎么解决
- unity中的透视投影矩阵
- CSS-网站导航栏标题之间的分隔符
热门文章
- nginx优化配置
- Eclipse下快速打开本地文件插件EasyExplorer(转)
- Python基础05 缩进和选择
- fatal error C1853: '*.pch' is not a precompiled header file created with this compile
- c#内置颜色大全
- Windows和Linux环境下Memcached安装与配置(转)
- C++学习5
- spring整合struts
- [ActionScript 3.0] LocalConnection示例
- 为什么老师不喜欢RelativeLayout