当前位置:首页 » 存储配置 » 存储过程中替换字符

存储过程中替换字符

发布时间: 2025-07-12 08:53:21

㈠ 关于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分钟。呵呵......

㈡ mysql 存储过程,如何把一个 字符串变成一个 整形数 比如 “33” 变成整数的33

convert(str, signed)

㈢ mysql存储过程如何遍历字符串的每个字符,并把每个字符转换成int(假设都是数字字符)

循环,每次循环截取一位转换

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

㈤ sqlserver快速查找所有存储过程中是否包含某字符

右键单击数据库名--任务--生成脚本--选择特定数据库对象--选择“存储过程”--下一步--保存到新建查询窗口

这样你就得到了所有存储过程的文本,在文本中查询ctrl+F

㈥ MSSQL Server数据库内容替换方法


在使用iwms系统的过程中,我们会经常遇到数据内容的替换操作。在告诉大家如何替换数据内容之前,我建议大家先了解一下SQL Server数据库的数据存储类型:
SQL Server数据类型:
数据替换一般都发生在字符串数据字段中,除了ntext类型字段以外的其他字符串数据字段都可以使用以下的sql语句进行替换:
update [swf_Upload] set [Dir] = replace([Dir],�/14',�/15')update [swf_Content] set [Description] =replace([Description],�/14',�/15')update [swf_Content_01] set [content] = replace(convert(varchar(4000), [content]),�/14',�/15')
UPDATE [数据表名] SET [字段名] = REPLACE([字段名],'老字符串','新字符串')
比如,替换iwms文章数据表(iwms_news)中的标题字段(title)的部分内容,我们应该这么写:
UPDATE [iwms_news] SET [title] = REPLACE([title],'老字符串','新字符串')
上面的sql语句在iwms后台的sql执行里面可以直接执行,基本上可以搞定所有的替换操作,但是由于ntext数据长度的原因,这一方法对ntext类型字段无效。那我们该用什么方法替换ntext类型字段的内容呢?方法有两种:
一是类型转换,将ntext类型转换为varchar类型,然后再用replace。适合于单页内容最大长度4000的文章。
update [数据表名] set [字段名] = replace(convert(varchar(4000), [字段名]),'老字符串','新字符串')
比如,替换iwms文章数据表(iwms_news)中的标题字段(content,ntext类型字段)的部分内容,我们应该这么写:
update iwms_news set [content] = replace(convert(varchar(4000),[content]),'老字符串','新字符串')
二是SQL Server存储过程
declare @ptr varbinary(16)
declare @artId int
declare @Position int,@len int
set @len = datalength('老字符串')
declare wux_Cursor scroll Cursor
for
select textptr([字段名]),[key字段名] from [数据表名]
for read only
open wux_Cursor
fetch next from wux_Cursor into @ptr,@artId
while @@fetch_status=0
begin
select @Position=patindex('%老字符串%',[字段名]) from [数据表名] where [key字段名]=@artId
while @Position0
begin
set @Position=@Position-1
updatetext [数据表名].[字段名] @ptr @Position @len '新字符串'
select @Position=patindex('%老字符串%',[字段名]) from [数据表名] where [key字段名]=@artId
end
fetch next from wux_Cursor into @ptr,@artId
end
close wux_cursor
deallocate wux_cursor
go
比如,替换iwms文章数据表(iwms_news)中的标题字段(content,ntext类型字段)的部分内容,我们应该这么写
declare @ptr varbinary(16)
declare @artId int
declare @Position int,@len int
set @len = datalength('老字符串')
declare wux_Cursor scroll Cursor
for
select textptr([content]),[articleid] from iwms_news
for read only
open wux_Cursor
fetch next from wux_Cursor into @ptr,@artId
while @@fetch_status=0
begin
select @Position=patindex('%老字符串%',[content]) from iwms_news where [articleid]=@artId
while @Position0
begin
set @Position=@Position-1
updatetext iwms_news.[content] @ptr @Position @len '新字符串'
select @Position=patindex('%老字符串%',[content]) from iwms_news where [articleid]=@artId
end
fetch next from wux_Cursor into @ptr,@artId
end
close wux_cursor
deallocate wux_cursor
go
ok了,需要注意的是:存储过程只能在SQL Server查询分析器中执行。
另外,由于iwms数据库结构的问题,有分页的文章内容需要先后对iwms_news和iwms_pages两个表内容进行替换操作。

热点内容
安卓版糖果传奇叫什么 发布:2025-07-12 18:06:26 浏览:262
编程素质人 发布:2025-07-12 18:04:17 浏览:670
在云服务器安装sqlserver 发布:2025-07-12 18:04:05 浏览:737
钉钉oa初始密码是多少 发布:2025-07-12 18:02:34 浏览:71
楼道口防盗门密码该如何使用 发布:2025-07-12 17:53:55 浏览:351
mysql源码目录 发布:2025-07-12 17:48:41 浏览:442
数据库导出dmp 发布:2025-07-12 17:39:08 浏览:336
济南少儿编程哪家好 发布:2025-07-12 17:33:09 浏览:128
c语言fread返回值 发布:2025-07-12 16:57:32 浏览:680
王者荣耀在哪里显示账号密码 发布:2025-07-12 16:36:42 浏览:898