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

存储过程拆分数字算法

发布时间: 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行。

热点内容
代码是否能进行编译 发布:2025-03-13 16:48:12 浏览:856
sql2005安装组件 发布:2025-03-13 16:33:54 浏览:230
JavastreamList 发布:2025-03-13 16:32:57 浏览:124
多sql 发布:2025-03-13 16:09:04 浏览:239
按键精灵导入脚本失灵 发布:2025-03-13 15:59:15 浏览:547
看雪加密与解密 发布:2025-03-13 15:37:56 浏览:549
声音压缩技巧 发布:2025-03-13 15:33:17 浏览:927
圆拟合算法 发布:2025-03-13 15:33:14 浏览:110
脚本如何安装 发布:2025-03-13 15:31:51 浏览:447
安卓手机怎么找回图片 发布:2025-03-13 15:24:53 浏览:376