oracle 常用自定义函数
来源:互联网 发布:马云 淘宝 编辑:程序博客网 时间:2024/06/07 01:33
一、实现 mysql find_in_set函数
CREATE OR REPLACE FUNCTION FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')RETURN NUMBER IS l_idx number:=0; -- 用于计算piv_str2中分隔符的位置 str varchar2(500); -- 根据分隔符截取的子字符串 piv_str varchar2(4000) := piv_str2; -- 将piv_str2赋值给piv_str res number:=0; -- 返回结果BEGIN-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1IF instr(piv_str, p_sep, 1) = 0 THEN IF piv_str = piv_str1 THEN res:= 1; END IF;ELSE-- 循环按分隔符截取piv_strLOOP l_idx := instr(piv_str,p_sep);-- 当piv_str中还有分隔符时 IF l_idx > 0 THEN -- 截取第一个分隔符前的字段str str:= substr(piv_str,1,l_idx-1); -- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断 IF str = piv_str1 THEN res:= 1; EXIT; END IF; piv_str := substr(piv_str,l_idx+length(p_sep)); ELSE -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1 IF piv_str = piv_str1 THEN res:= 1; END IF; -- 无论最后是否相等,都跳出循环 EXIT; END IF;END LOOP;-- 结束循环END IF;-- 返回resRETURN res;END FIND_IN_SET;
二、只要前面的id串中,有一个id出现在后面的串,就返回1,否则返回0
CREATE OR REPLACE FUNCTION CHECKS2(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')RETURN NUMBER IS l_idx number:=0; -- 用于计算piv_str1中分隔符的位置 str varchar2(500); -- 根据分隔符截取的子字符串 piv_str0 varchar2(4000) := piv_str1; -- 将piv_str1赋值给piv_str0 piv_str varchar2(4000) := piv_str2; -- 将piv_str2赋值给piv_str res number:=0; -- 返回结果BEGIN-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1IF instr(piv_str, p_sep, 1) = 0 and instr(piv_str0, p_sep, 1) = 0 THEN IF piv_str0 = piv_str THEN res:= 1; END IF;ELSE if (piv_str0 is not null) then loop str:=''; mx_splitstring(piv_str0,',',str); if str is not null then if find_in_set(str,piv_str)>0 then res:=1; return res; end if; end if; exit when piv_str0 is null; end loop; end if;/*-- 循环按分隔符截取piv_strLOOP l_idx := instr(piv_str0,p_sep);-- 当piv_str中还有分隔符时 IF l_idx > 0 THEN -- 截取第一个分隔符前的字段str str:= substr(piv_str0,1,l_idx-1); res:= Find_IN_set(str, piv_str2); IF res > 0 THEN EXIT; END IF; piv_str0 := substr(piv_str0,l_idx+length(p_sep));-- ELSE -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1 -- IF piv_str0 = piv_str1 THEN -- res:= 1; -- END IF; -- -- 无论最后是否相等,都跳出循环 -- EXIT; END IF;END LOOP;-- 结束循环*/END IF;-- 返回resRETURN res;END ;
三、后面的ID串是否全部包含前面的ID串,如果是则返回1,否则返回0
CREATE OR REPLACE FUNCTION CHECKS_all_in(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')RETURN NUMBER IS l_idx number:=0; -- 用于计算piv_str1中分隔符的位置 str varchar2(500); -- 根据分隔符截取的子字符串 piv_str0 varchar2(4000) := piv_str1; -- 将piv_str1赋值给piv_str0 piv_str varchar2(4000) := piv_str2; -- 将piv_str2赋值给piv_str res number:=1; -- 返回结果BEGIN-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1IF instr(piv_str, p_sep, 1) = 0 and instr(piv_str0, p_sep, 1) = 0 THEN IF piv_str0 = piv_str THEN res:= 1; END IF;ELSE if (piv_str0 is not null) then loop str:=''; mx_splitstring(piv_str0,',',str); if str is not null then if find_in_set(str,piv_str)<=0 then res:=0; return res; end if; end if; exit when piv_str0 is null; end loop; end if;/*-- 循环按分隔符截取piv_strLOOP l_idx := instr(piv_str0,p_sep);-- 当piv_str中还有分隔符时 IF l_idx > 0 THEN -- 截取第一个分隔符前的字段str str:= substr(piv_str0,1,l_idx-1); res:= Find_IN_set(str, piv_str2); IF res > 0 THEN EXIT; END IF; piv_str0 := substr(piv_str0,l_idx+length(p_sep));-- ELSE -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1 -- IF piv_str0 = piv_str1 THEN -- res:= 1; -- END IF; -- -- 无论最后是否相等,都跳出循环 -- EXIT; END IF;END LOOP;-- 结束循环*/END IF;-- 返回resRETURN res;END ;
0 0
- oracle 常用自定义函数
- oracle数据库常用的一些自定义函数
- Oracle常用内置Or自定义函数-SQL宝典
- 自定义常用函数
- js常用自定义函数
- javascript常用自定义函数
- 常用的自定义函数
- 自定义常用函数
- php常用自定义函数
- MSSQL 常用自定义函数
- PHP 常用自定义函数
- 常用js自定义函数
- 常用js自定义函数
- 常用系统函数,自定义函数
- oracle用户自定义函数
- oracle用户自定义函数
- ORACLE自定义合计函数
- Oracle自定义聚集函数
- 河工大校赛E 某科学的打麻将
- ALSA声音编程介绍
- 浅析Linux下的子系统
- QTTabBar的批量修改文件时间的插件
- C++ 学习大纲
- oracle 常用自定义函数
- 随机闹钟
- 今天第一天开博客
- Vijos 1484题:ISBN号码
- git连接GitHub
- encodeURIComponent传入后台解码
- matplotlib的基本用法(二)——设置坐标轴
- 走技术线,还是技术管理线?
- java.net.SocketException四大异常解决方案