宝哥软件园

Oracle使用split和splitstr函数分批分离字符串

编辑:宝哥软件园 来源:互联网 时间:2021-08-03

类型:数据库类大小:42.1M语言:中文评分:5.0标签:立即下载。最近的项目对批量操作有很多要求。当客户端向数据库发送一组逗号分隔的ID字符串时,存储过程需要对其进行划分并逐一处理。

过去有几种处理方法:1。在存储过程中写一个循环,逐个分析字符串中的ID,然后逐个处理。缺点:一次处理一个,如果每次都有很多判断,效率会受到很大影响。适用于每次治疗都需要个别判断的情况。2.使用临时表,首先调用一个存储过程拆分ID并插入临时表,然后结合临时表一次写SQL和处理多个事务。缺点:需要插入临时表,效率低。数据量越大,影响越严重。第二种方法在以前的项目中使用最多,比第一种方法方便高效。

现在项目中使用了大量的批量操作,大量重复的代码让我很累。我突然想到。Net和JS都有类似拆分的功能,所以拆分字符串非常方便。要是甲骨文有这样的功能就好了。

研究发现,在oracle中加入split函数是完全可以实现的,避免了插入临时表,因此效率远高于上述第二种方法。后来,我添加了splitstr函数,它可以很容易地获取字符串中的指定节点。有了这两个功能,处理批量操作真的更强大了,效率也翻倍了,呵呵.

好了,剪短码!如有不妥,请各位前辈指正。

1/*2* Oracle创建split和splitstr函数3*/45/*创建一个表类型*/6 creatorreplacetypettabletypestableofvarchar 2(32676)7/89/*创建一个split函数*/10 creatorreplacefficationsplit(p _ listCLOB,p_sepVARCHAR2:=',)11返回tabletype 12流水线13/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 14 *名称: split 15 *作者3318 *参数:p_list:要拆分的字符串。可以指定19p_sep:分隔符、默认逗号或字符或字符串。20 *示例:从用户22中选择* 21当reuse _ din(从表(split ('1,2 ')中选择column _ value 23)24返回两行u _ ids为1和2的数据时。25 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 26is 27l _ idxPLS _ INTEGER;28v _ listvarchar 2(32676):=p _ list;29 begin 30 loop 31l _ idx :=INStr(v _ list,p _ sep);3233 fl _ idx 034 th PhyOhyPipeLow(SUBSTER(v _ list,1,l _ idx-1));36v_list:=SUBSTR(v_list,l _ idx LENGTH(p _ sep));37else 38 piper ow(v _ list);39出口;40ENDIF41ENDLOOP42END43/4445/*创建splitstr函数*/46创建或替换splitstr函数(strinclob,47 iin number :=,48 sepininvarchar23360=',49)50 Return varchar 251/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 52 *名称: Splitstr 53 *作者3360张善祺。要分割的56 *参数3360str:字符串。57i:返回节点号。当I为0时,返回str中的所有字符,当I超过可除数时,返回null。可以指定分隔符、默认逗号、字符或字符串。当字符串中不存在指定的分隔符时,返回sep中的字符。59 * example : selectsplitstr(' ABC,def ',1)as trfrom dual;获取ABC 60 select splitstr ('ABC,def ',3)as tr from dual;获取空的61 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 62i s63t _ in number;64t _ countNUMBER65t _ strwarchar 2(4000);66 begin 67 ifi=068 then 69t _ str :=str;70ELSIFINSTER(str,sep)=071 StyWanT _ str :=sep;73else 74 selectcount(*)75 intot _ count 76 from table(split(str,sep));7778 ifi=t _ count 79 thy hAnDreamSelectstr 81 intot _ str 82 from(selectRowNumasitem,COLUMN _ valueasstr 83 from table(split(str,sep)))84 here item=I;85ENDIF86ENDIF8788RETURNt _ str89END90/

更多资讯
游戏推荐
更多+