存儲過程中替換字元
㈠ 關於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兩個表內容進行替換操作。