问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PL/SQL 拆解字符串语句

发布网友 发布时间:2022-04-10 02:37

我来回答

3个回答

热心网友 时间:2022-04-10 04:06

我提供一个拆分字符串的通用函数给你,你再写这种SQL:
1、先建立一个包,定义数组类型:
CREATE OR REPLACE PACKAGE pkg_string is

-- Purpose : 字符串处理

-- Public type declarations
TYPE StringArray IS VARRAY(2000) OF VARCHAR2(2000);

END pkg_string;

2、拆分字符串的通用函数:
CREATE OR REPLACE FUNCTION fun_ParseToArray(
a_SourceString IN VARCHAR2, --源字符串
a_Delimiter IN VARCHAR2 --拆分的分隔符
) RETURN pkg_string.StringArray IS
-- ********************************************************
-- 根据分隔符拆分字符串为数组
-- ********************************************************
v_Result pkg_string.StringArray; --数组
iCount INTEGER;
iBegin INTEGER;
sValue VARCHAR2(2000);
sSplitString VARCHAR2(2000);
BEGIN
--检查参数
IF a_SourceString IS NULL OR a_Delimiter IS NULL THEN
RETURN(v_Result);
END IF;
IF a_SourceString = '' THEN
RETURN(v_Result);
END IF;
--初始化数组
v_Result := pkg_string.StringArray();
--Only one entry was found
IF instr(a_SourceString,a_Delimiter) = 0 THEN
-- 数组加1维
v_Result.extend();
-- 将数据存入数组
v_Result(1) := a_SourceString;
RETURN(v_Result);
END IF;
iCount := 0;
sSplitString := a_SourceString;
LOOP
iBegin := INSTR(sSplitString,a_Delimiter);
EXIT WHEN iBegin < 1;
sValue := Substr(sSplitString,1,iBegin - 1);
sSplitString := SubStr(sSplitString,iBegin + 1);
-- 计数器加1
iCount := iCount + 1;
-- 数组加1维
v_Result.extend();
-- 将数据存入数组
v_Result(iCount) := sValue;
END LOOP;
--Set last entry
sSplitString := SubStr(sSplitString, iBegin);

--Update array and counter if necessary
IF Length(sSplitString) > 0 THEN
-- 计数器加1
iCount := iCount + 1;
-- 数组加1维
v_Result.extend();
-- 将数据存入数组
v_Result(iCount) := sSplitString;
END IF;

RETURN(v_Result);
EXCEPTION
WHEN others THEN
return v_Result ;
END fun_ParseToArray;

3、组成SQL
...
vs_row pkg_string.StringArray;
vs_column pkg_string.StringArray;
...
vs_row := fun_ParseToArray(你的一列数据,'#');
--再用for循环拆分vs_row的列:
vs_column(j) := fun_ParseToArray(vs_row(i),'|');
再把拆分出来的数据入表

热心网友 时间:2022-04-10 05:24

姓名|性别|通信地址|联系电话#姓名|性别|通信地址|联系电话#姓名|性别|通信地址|联系电话#

一个字段存在多个姓名等信息?
如果能确定会出现多少个#或,符号用以下方式处理

用instr+substr

热心网友 时间:2022-04-10 06:59

用instr+substr
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
"多难兴邦"这个词,让我们懂得了什么? uc怎么进入阅读模式 进入阅读模式方法介绍 uc怎么进入小说阅读模式 uc浏览器设置阅读模式-uc浏览器设置阅读模式方法 uc电脑阅读模式怎么设置电脑上UC浏览器的阅读模式怎么打开 微信怎么判断对方把你拉黑并且删除了,还是只是拉黑了? 公司诉讼由哪个法院管辖?公司诉讼管辖确定的理论依据? 笔记本电脑开机无法进入系统笔记本电脑开机后无法进入系统 从深圳到乌镇玩三天,花销最少是多少?越少越好,如果有个计划就更好乐 马上快过年放假了,第一次去见岳父,送茅台好还是五粮液好? 打人轻微伤要拘留会留案底吗 轻伤立案和解自首,没拘留,录了口供,会有案底吗?已经过了9个月了,还会有事吗? 轻伤二级协商后会留有案底吗 岗位工资和薪级工资对照表 打架去派出所调解出来,和解了会不会留案底? 最新各类岗位工资及薪级工资对照表资料 轻伤和解后会有案底吗 互相打架双方造成轻伤,经过派出所协调处理后,是否算有过犯罪记录 打架到派出所双方和解了,算不算是有前科了 打架到派出所调解了,还会有案底吗 打架至人轻伤,看守所关三天,后赔钱对方谅解,就放回来了会有案底吗? 打人致轻伤后调解会留案底吗,政审能通过吗 打架对方腿部骨折经过派出所协商后和解会有案底吗? 打架报警后,在派出所和解,会不会有案底?对以后的工作有影响吗? 打架派出所调解了还会有案底吗 老婆发给我怀孕的消息我忙着没看手机生气了怎么哄老婆开心? 能把长粒糯米和圆粒糯米混在一起包粽子吗? 老婆爱生气应该怎么哄她呢? 媳妇生气了怎么哄 长粒糯米包粽子好还是圆粒的糯米包粽子好? 植物界、水杉、活化石、的、称为、银杏、被、和、连成句 车辆行驶证做一个夫妻变更,保险续保继续享受当前折扣吗,要怎么操作? 机动车夫妻变更 保险 2021年新政策夫妻过户汽车 怎样消除因为久坐而造成臀部的黑皮 夫妻之间新车为换车牌过户后保险用过户吗?需要什么手续? *经常坐凳子,*哪里都坐产生黑色素了,涂什么可以变白啊 坐久导致的屁股发黑,怎么解决? 上班坐久了,屁股黑又发水泡,咋办 什么是WDS 如何利用路由器的WDS功能蹭网 屁股两边坐斑怎么去 电脑版的好玩的小游戏有那些 给你们的外教写一张圣诞贺卡。(英文) 无线路由器WDS桥接怎么放置路由器位置? 圣诞节送给英语老师的贺卡,希望翻译,是整篇的,要长点(英语) 给英语老师送圣诞节贺卡 上面应该写些什么? 夜间耳朵痛是什么原因 送给英语老师的圣诞贺卡封面怎么做 半夜里耳朵痛死了,还有点听不见怎么办 有关圣诞节做贺卡的资料,送给英文老师的,最好有翻译,不要太深奥。一定要快!