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

Oracle中怎样用存储过程将一段字符串以逗号为界截取,并将得到的子串存...

发布网友 发布时间:2022-05-09 08:29

我来回答

3个回答

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

--通过游标遍历调用方法拆取存表:

--方法

create or replace function f_test_substr(
prm1 varchar2,    --地
prm2 varchar2 ,   --名称
prm3 varchar2,    --IP
prm4 varchar2    --结果
)
return varchar2
as
v_n int:=0;  --第几次取
v_l int;  --:截取次数
v_s varchar2(2000);  --处理拆分字符串
v_s1 varchar2(200);  --本次拆分
v_s2 varchar2(200);  --本次剩余
v_type varchar2(100);  --设备类型
v_code varchar2(100);  --设备编号
v_desc varchar2(100);  --设备描述
v_errmsg varchar2(200);
begin
v_l:=length(prm4)-length(replace(prm4,';',''));
v_s:=prm4||';';
v_s1:=substr(v_s,1,instr(v_s,';',1,1));
v_s2:=replace(v_s,v_s1,'');
while v_n<=v_l loop
v_s2:=replace(v_s2,v_s1,'');
v_s1:=substr(v_s1,1,length(v_s1)-1);
v_type:=substr(v_s1,1,instr(v_s1,',',1,1)-1);
v_code:=substr(v_s1,instr(v_s1,',',1,1)+1,instr(v_s1,',',1,2)-instr(v_s1,',',1,1)-1);
v_desc:=substr(v_s1,instr(v_s1,',',1,2)+1,instr(v_s1||',',',',1,3)-instr(v_s1,',',1,2)-1);
insert into t_test_str(a,b,c,d,e,f) values(prm1,prm2,prm3,substr(v_type,instr(v_type,']',1)+1),v_code,v_desc);
v_n:=v_n+1;
v_s1:=substr(v_s2,1,instr(v_s2,';',1,1));
end loop;
commit;
return '成功';

exception
when others then
v_errmsg:=substr(sqlerrm,1,200);
return v_errmsg ;

end;

--存过

create or replace procere p_test_substr1(o_result out varchar2)

as
v_a varchar2(20);
v_b varchar2(20);
v_c varchar2(20);
v_d varchar2(2000);
v_num int;
cursor c_str is
SELECT * from t_test_substr
;
begin
select count(1) into v_num from t_test_substr;
while v_num>0 loop
open c_str;
loop
FETCH c_str INTO
v_a,v_b,v_c,v_d;
EXIT WHEN c_str%NOTFOUND;

o_result:=f_test_substr(v_a,v_b,v_c,v_d);
v_num:=v_num-1;
end loop;
CLOSE c_str;
end loop;
end;

效果见图:

热心网友 时间:2022-04-18 06:42

create or replace procere p_al_output
as
str_id varchar(60);
str_dm varchar(60);
str_mc varchar(800);
str_start number;
str_len number;
str_length number;
str_end number;
str_count number;
str_content varchar2(800);
str_partcontent varchar2(800);
str_iscontent number;

cursor c_findsy is select id,dm, mc from t_sgg_findkey where mc like '%石油%' ;--定义游标begin open c_findsy;--打开游标

loop --循环
fetch c_findsy into str_id,str_dm,str_mc;--获取游标中的字段值,并赋值给变量
exit when c_findsy%notfound;--判断,当游标取不到数据时,跳出循环 str_start := 0;
str_count := 0; loop
str_start := str_count + 1;--获取截取字符串起始索引
--select instr(str_mc,',',str_count+1,1) into str_count from al;--获取','索引
str_count:=instr(str_mc,',',str_count+1,1);
str_end := str_count - 1;--获取截取字符串终止索引
--str_length := str_end - str_start + 1;--获取截取字符串长度 if str_count<>0--判断,如果str_count不等于0
then
str_len := str_end - str_start + 1;--获取截取字符串长度
else
select length(str_mc) into str_length from al;--获取全字符串长度
str_len := length(str_mc) - str_start + 1; end if;
select substr(str_mc,str_start,str_len) into str_partcontent from al;--截取字符串 获得所需字符串 select instr(str_partcontent,'石油',1,1) into str_iscontent from al;--判断截取字符串是否包含'石油'字段
if str_iscontent<>0--如果包含 则执行 如下操作
then

begin
insert into t_al_test_sy(pid,str_id,str_dm,str_mc) values(sq_hr_test_sypid.nextval,str_id,str_dm,str_partcontent);
exception when others then
--rollback;
--return;
--t_bj:='0';
null;
end;
end if; exit when str_count=0;--当在所剩字符串中未找到','时退出
end loop;
--if t_bj='0' then
-- rollback;
--else
-- commit;
--end if;
end loop;
commit;
close c_findsy;
end;

热心网友 时间:2022-04-18 08:16

之前我保存的经典的方法,你可以参考下
首先创建一张表t_al_test_sy
字段分别为:pid,str_id,str_dm,str_mc;
存储过程如下:
create or replace procere p_al_output
as
str_id varchar(60);
str_dm varchar(60);
str_mc varchar(800);
str_start number;
str_len number;
str_length number;
str_end number;
str_count number;
str_content varchar2(800);
str_partcontent varchar2(800);
str_iscontent number;

cursor c_findsy is select id,dm, mc from t_sgg_findkey where mc like '%石油%' ;--定义游标begin open c_findsy;--打开游标

loop --循环
fetch c_findsy into str_id,str_dm,str_mc;--获取游标中的字段值,并赋值给变量
exit when c_findsy%notfound;--判断,当游标取不到数据时,跳出循环 str_start := 0;
str_count := 0; loop
str_start := str_count + 1;--获取截取字符串起始索引
--select instr(str_mc,',',str_count+1,1) into str_count from al;--获取','索引
str_count:=instr(str_mc,',',str_count+1,1);
str_end := str_count - 1;--获取截取字符串终止索引
--str_length := str_end - str_start + 1;--获取截取字符串长度 if str_count<>0--判断,如果str_count不等于0
then
str_len := str_end - str_start + 1;--获取截取字符串长度
else
select length(str_mc) into str_length from al;--获取全字符串长度
str_len := length(str_mc) - str_start + 1; end if;
select substr(str_mc,str_start,str_len) into str_partcontent from al;--截取字符串 获得所需字符串 select instr(str_partcontent,'石油',1,1) into str_iscontent from al;--判断截取字符串是否包含'石油'字段
if str_iscontent<>0--如果包含 则执行 如下操作
then

begin
insert into t_al_test_sy(pid,str_id,str_dm,str_mc) values(sq_hr_test_sypid.nextval,str_id,str_dm,str_partcontent);
exception when others then
--rollback;
--return;
--t_bj:='0';
null;
end;
end if; exit when str_count=0;--当在所剩字符串中未找到','时退出
end loop;
--if t_bj='0' then
-- rollback;
--else
-- commit;
--end if;
end loop;
commit;
close c_findsy;
end;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕错过了糖筛怎么办 糖筛有哪些注意事项 怀孕几个月查唐筛 蔡家沟镇慈云寺 哈佳高铁高楞站多少平方米位置在那 超威电池生产日期怎么看 超威电池寿命一般多长时间 华晨宇鸟巢四面台10w+秒罄!!火星演唱会舞台概念图震撼发布! 手机连接160wifi电脑蓝屏使用160WiFi遇到问题应该如何解决 为什么手机wifi总是刚开启,锁屏就掉了。wifi设置里的休眠模式也是永久的... 建行卡为什么不能网上转账 学校发我们的建设银行卡一定要激活吗? 我打电话查余额说输入取钱密码... 求助OG11 CR56 偶最怕逆否命题了搞不懂55 cod16cr562022年现在还强势吗 cr56焊条是什么?知道的回答下 《东方财富通金融终端》这款软件是哪家软件公司帮助东方财富网设计开发的 技术创造财富,开发安卓软件能赚钱吗 山东德州财富软件科技招聘 深圳市财富圈软件技术有限公司怎么样? 请问《东方财富通》是用什么软件平台开发的? 数据库用的是什么? 我想开发一个理财的软件(安卓的 ) 婚介所的服务流程? 北京财富平台科技有限公司怎么样? 软件开发能给我带来财富吗 时间财富网软件开发怎么样? 在东方财富网里面做软件开发有前途吗? 专利申请费用标准是什么 德州财富软件科技有限公司怎么样? 申请个银行卡需要多少手续费 财富软件(北京)有限公司怎么样? 申请专利手续费需要多少 股票的买入,卖出以及撤回的申请程序是什么?手续费都是如何算的? 哪位大神帮我看下啊 新买的港行iphone4S是不是新机 型号MD235XP 序列号C36HCR56DTC0 16G 黑色的 帮帮忙 plsql中关于一张表中一条记录某个字段进行分割处理后插入到另一张表中多条数据的写法 千机网的上门换电池有人用过吗?换的电池耐用么? 铬钢的牌号 iPhoneX电池老化正常吗?苹果售后换还是千机网能换? 12Cr1MoV硬度多少 中科红信(北京)科技有限公司怎么样? 能发下空中劫持BD中英双字1024高清的种子或下载链接么? 天津属于一线还是二线城市? 韩国K-MALL入住城阳片区在那 三区一中心 指什么 《文和友》为什么那么火? 国家对大学生旅游市场的重视度 《征信业务管理办法》征求意见,这对个人信息采集有何安全保障? 糖大蒜怎么腌制? 被封号是什么原因? 为什么被封了 刚申请的,为什么第二天就被封了 腾讯公司为什么要封我的? 为什么我的我没干什么就被封号了呢?