给Oracle添加split和splitstr函数的方法
**************************************/
后来我还添加了splitstr函数,可以很方便获取字符串中的指定节点。
RETURN tabletype
BEGIN
* Example: select splitstr('abc,def', 1) as str from dual; 得到 abc
* Name: splitstr
多方查找资料发现,给oracle添加split函数是完全可以实现的,避免了插入临时表,所以效率比上面的第2中方法效率高很多。
1、在存储过程内写循环,逐个分析字符串中的ID,然后逐个处理。缺点:循环一次处理一个,如果每次判断都很多,效率将很受影响。适合每次处理要做单独判断的情况。
/* 创建 split 函数 */
* Function: 返回字符串被指定字符分割后的指定节点字符串。
/
RETURN VARCHAR2
)
PIPE ROW (v_list);
SELECT str
* Date: 2012-09-03.
t_i NUMBER;
t_count NUMBER;
l_idx PLS_INTEGER;
* Parameters: p_list: 待分割的字符串。
ELSE
FROM users
FROM (SELECT ROWNUM AS item, COLUMN_VALUE AS str
现在项目中用到了很多很多的批量操作,很多的重复代码让我不厌其烦。忽然想到,.Net和JS中都有split类似的函数,拆分字符串很方便,oracle中要是也有这样的功能该多好呀。
/**************************************
/* 创建 splitstr 函数 */
t_str := str;
返回u_id为1和2的两行数据。
select splitstr('abc,def', 3) as str from dual; 得到 空
INTO t_count
FROM table (split (str, sep));
l_idx := INSTR (v_list, p_sep);
v_list := SUBSTR (v_list, l_idx + LENGTH (p_sep));
好了,闲话少说,上代码!如有不妥之处,请各位前辈博友斧正。
END IF;
IF i = 0
WHERE u_id IN (SELECT COLUMN_VALUE
最近项目中有很多需要做批量操作的需求,客户端把一组逗号分隔的ID字符串传给数据库,存储过程就需要把它们分割,然后逐个处理。
/
THEN
FROM table (split (str, sep)))
RETURN t_str;
IF l_idx > 0
THEN
THEN
INTO t_str
/* 创建一个表类型 */
PIPE ROW (SUBSTR (v_list, 1, l_idx - 1));
*/
2、使用临时表,先调用一个存储过程将ID拆分并插入到临时表中,然后结合临时表可以写SQL一次处理多笔。缺点:需要插临时表,效率不高,数据量越大影响越严重。
IF i <= t_count
sep: 分隔符,默认逗号,也可以指定字符或字符串。当指定的分隔符不存在于str中时返回sep中的字符。
复制代码 代码如下:
WHERE item = i;
IS
CREATE OR REPLACE FUNCTION splitstr (str IN CLOB,
IS
* Author: Sean Zhang.
LOOP
* Author: Sean Zhang.
/**************************************
sep IN VARCHAR2 := ','
/
PIPELINED
* Date: 2012-09-03.
* Parameters: str: 待分割的字符串。
SELECT COUNT ( * )
* Function: 返回字符串被指定字符分割后的表类型。
t_str := sep;
有了这两个函数,处理批量操作,真是如虎添翼,效率倍增,嘿嘿……
BEGIN
i IN NUMBER := 0,
THEN
ELSIF INSTR (str, sep) = 0
以前的项目用的最多的还是第2中方式,毕竟方便,且效率比第1种好。
* Example: SELECT *
create or replace type tabletype as table of VARCHAR2(32676)
/*
END LOOP;
ELSE
p_sep: 分隔符,默认逗号,也可以指定字符或字符串。
* Name: split
CREATE OR REPLACE FUNCTION split (p_list CLOB, p_sep VARCHAR2 := ',')
* Oracle 创建 split 和 splitstr 函数
EXIT;
**************************************/
END IF;
END;
以往的处理方式有如下几种:
v_list VARCHAR2 (32676) := p_list;
FROM table (split ('1,2')))
i: 返回第几个节点。当i为0返回str中的所有字符,当i 超过可被分割的个数时返回空。
END;
END IF;
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/oracle/3278.shtml
相关文章
热门TAG
命令 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 技巧 权重 服务器 网站流量 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows 蜘蛛 搜索引擎 网站收录 JSP 实例解析最新文章
-
OracleRAC的五大优势及其劣
时间:2021-01-05
-
Oracle优化器 自适应执行计
时间:2021-01-05
-
Oracle行内链接不会引起U
时间:2021-01-05
-
Window下Oracle Database 11g 发行
时间:2020-12-29
-
Oracle如何实现like多个值的
时间:2020-12-29
-
maven添加oracle依赖失败问题
时间:2020-12-29
-
OracleRAC基本概念及入门
时间:2020-12-29
-
Azure File Storage 基本用法
时间:2020-12-26
热门文章
-
Azure Queue Storage 基本用法 Azure Storage 之
时间:2020-12-26
-
Oracle存储过程编程详解
时间:2020-12-07
-
win10下oracle 11g安装图文教程
时间:2020-12-25
-
oracle 数据库学习 基本结构介绍
时间:2020-12-13
-
Azure File Storage 基本用法 Azure Storage 之 F
时间:2020-12-26
-
windows使用sqlpus连接oracle 数据库的教程图
时间:2020-12-25
-
Window下Oracle Database 11g 发行版2安装教程
时间:2020-12-29
-
Oracle解锁的方式介绍
时间:2020-12-14
-
linux下oracle设置开机自启动实现方法
时间:2020-12-13
-
Oracle学习记录之使用自定义函数和触发器
时间:2020-12-07
