当前位置:首页 » 存储配置 » 存储过程拆分数字算法

存储过程拆分数字算法

发布时间: 2023-08-16 02:01:34

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

给你写了个包,包体代码如下:
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分钟。呵呵......

㈡ oracle存储过程 遍历字符串

不用循环不行么,一个sql就搞定啦

selectcfrom
(withtestas(select'21,32,43'cfromal)
selectsubstr(t.ca,instr(t.ca,',',1,c.lv)+1,instr(t.ca,',',1,c.lv+1)-(instr(t.ca,',',1,c.lv)+1))ASc
from(select','||c||','ASca,length(c||',')-nvl(length(REPLACE(c,',')),0)AScntFROMtest)t,
(<=100)cwherec.lv<=t.cnt)

'21,32,43' --这个你换成你要查的字符串,数字字母什么都可以,只要逗号分隔就好

㈢ SQL 存储过程中 怎么将string转换为int进行计算

第一个方法就是使用执行sql语句,参数sql就是sql语句;
第二个方法就是调用存储过程,参数sql就是存储过程的名称,paras就是存储过程的参数。

㈣ MYSQL用存储过程求1到100累加

1、在单元格A1中输入数字1,向下拖动填充到100行。

热点内容
sql语句时间段查询 发布:2025-02-01 20:36:12 浏览:636
迷你世界体验码密码是多少 发布:2025-02-01 20:10:18 浏览:533
安卓的手机玩吃鸡怎么调节 发布:2025-02-01 20:06:59 浏览:22
云服务器12位ip 发布:2025-02-01 20:00:07 浏览:472
脚本微信取关 发布:2025-02-01 19:35:01 浏览:155
如何用云服务器部署svn 发布:2025-02-01 19:33:20 浏览:990
缓存迅雷 发布:2025-02-01 19:31:53 浏览:978
linux与unixshell编程指南 发布:2025-02-01 19:25:03 浏览:939
护肤品数据库 发布:2025-02-01 19:25:02 浏览:648
python接受json数据 发布:2025-02-01 19:24:24 浏览:943