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

关于oracle 存储过程 如何切割一个字符串 转化为字符数组,然后遍历该数组: 类似ab,12;cd,55;k,7

发布网友 发布时间:2022-04-07 21:28

我来回答

1个回答

热心网友 时间:2022-04-07 22:57

给你写了个包,包体代码如下:
CREATE OR REPLACE PACKAGE BODY Pkg_Bai IS
-- 自定义个数组类型
TYPE Typ_Str_Array IS TABLE OF VARCHAR2(200) INDEX BY BINARY_INTEGER;
PROCEDURE Prc_String_To_Array(Pv_i_String IN VARCHAR2,
Pv_i_Identifier IN VARCHAR2,
Pt_o_Array OUT Typ_Str_Array) IS

Lv_Tmpstr VARCHAR2(200);
Lv_Changed_String VARCHAR2(4000);

BEGIN

-- 初始化
Lv_Changed_String := Pv_i_String;

-- 拆分逻辑
-- 1.字符串中没有标识符
IF Instr(Pv_i_String, Pv_i_Identifier, 1, 1) = 0 THEN
Pt_o_Array(Pt_o_Array.Count + 1) := Pv_i_String;
ELSE

-- 2.字符串中有标识符
WHILE Instr(Lv_Changed_String, Pv_i_Identifier, 1, 1) > 0 LOOP
Lv_Tmpstr := Substr(Lv_Changed_String,
1,
Instr(Lv_Changed_String, Pv_i_Identifier, 1, 1) - 1);

Pt_o_Array(Pt_o_Array.Count + 1) := Lv_Tmpstr;
Lv_Changed_String := Substr(Lv_Changed_String,
Instr(Lv_Changed_String, Pv_i_Identifier, 1, 1) + 1,
Length(Lv_Changed_String));
END LOOP;

-- 3.最有一个被拆分出来的字符串中不含标识符
IF NOT Lv_Changed_String IS NULL THEN
-- 将最后一个保存
Pt_o_Array(Pt_o_Array.Count + 1) := Lv_Changed_String;
END IF;

END IF;

EXCEPTION
WHEN OTHERS THEN
NULL;
END;

PROCEDURE Prc_Test(Pv_i_Str IN VARCHAR2) IS
--定义数组
Lt_Array Typ_Str_Array;
Ln_Count NUMBER; -- 数组元素个数
Ln_Num NUMBER;
Lv_Value VARCHAR2(30);
BEGIN

Prc_String_To_Array(Pv_i_Str, ';', Lt_Array);
-- 循环数组
FOR i IN 1 .. Lt_Array.Count LOOP
-- 获取每个元素中数值
Ln_Num := To_Number(TRIM(Substr(Lt_Array(i), Instr(Lt_Array(i), ',', -1) + 1)));
IF Ln_Num > 20 THEN
Lv_Value := TRIM(Substr(Lt_Array(i), 1, Instr(Lt_Array(i), ',', -1) - 1));
INSERT INTO a (col_a) VALUES (lv_value);
END IF;
END LOOP;
END;

END Pkg_Bai;

调用Prc_Test来分隔字符串并按要求比较后插入a表。我测试过,没有问题。
需要注意的是,数据的要求:字符串中每组数据间使用英文小写分号分隔,同一组数据字母在前,数字在后,以英文小写逗号分隔。测试一下吧。
欢迎采纳,不采纳你都对不起我这20分钟。呵呵......
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 神魔大陆新城“七日谈的故事”任务怎么做 谁有朱哲琴-七日谈[台湾]音乐专辑的百度云地址 神魔大陆七日谈有哪七种故事?怎么完成成就? 七日谈txt全集下载 《七日谈字母表,以及希里花斯人的合理生活》epub下载在线阅读,求百度网盘云资源 七日谈的介绍 凤凰网《七日谈》里,如何看待大城市打拼小城市安家? 七日谈,打一个字 《七日谈来自民间的中日对话录》epub下载在线阅读全文,求百度网盘云资源 姓陈的女明星名单有哪些? 姓陈的一线明星有哪些 60岁以上姓陈的男演员有哪些 姓陈的男演员有哪些 中国有哪些姓陈的歌手? 我们中国姓陈的明星有哪些? 帮查一查陈姓男歌手名单 吉林省长春市著名的导演有谁姓陈的 成龙实际姓什么 姓李姓陈姓何姓王的男导演有哪些? 成龙原名叫什么? 神魔大陆2《七日谈》都在哪? 短篇小说十日谈的故事框架躲避什么 一物生来真稀奇,逢到休息穿红衣,每天都要脱一件,脱到年底剩张皮。打一物 《神魔*》中 雷辛格的NPC:典籍收藏家 比索.萨 发布的问题【七日谈的故事】谁知道其中一章在哪里? 类似《盛世》,《七日谈》这样的小说有哪些推荐 法国最伟大的文学家是谁? 所有读XU的字 xu(旭)字有哪些 xu的汉字是什么? 姓xu是什么字 含有“xu”字的成语有哪些? 有个生僻字念xu,表达谨慎的意思,怎么写的? 带有好意义的古文单字有哪些 南通大学学生怎么做教学质量网评? 南通大学学生信息查询的密码忘了怎么办? 在家里面怎么不好查南通大学考试成绩 南通大学成绩查询 南通大学医学院学生查分网 南通大学校园网上怎么找到四级准考证的 语音通话最小化怎么退出