今天写了个过程,实现了这么一个功能:
对数字字符串,如0203944,进行拆分,再计算每个数字加起来的和。
这里有一个定义需要注意,就是类型为rowid的变量:v_rid,开始想把
这个变量定义成number类型,但是一执行报错:type mismatch 。
正好今天早上看书的时候看到表字段类型,似乎有rowid这么个类型,试
了一下,结果还真的可以,呵呵。
--drop table tmp_whf_testkkk
create table tmp_whf_testkkk(
flag number(5) ,
num varchar2(255),
divnum varchar2(255),
sum number(5)
)
select * from tmp_whf_testkkk
for update
declare
vn_len number(3) := 7;
vn_sum number(5) := 0;
vc_num varchar2(255);
vc_divnum varchar2(255);
vc_tmp varchar2(255);
i integer := 1;
v_rid rowid;
cursor c_num is
select k.num, k.rowid from tmp_whf_testkkk k;
begin
open c_num;
fetch c_num into vc_num, v_rid;
select length(vc_num) into vn_len from dual;
while c_num % found loop
while i <= vn_len loop
select substr(vc_num, i, 1) into vc_tmp from dual;
if length(vc_divnum) <> 0 then
vc_divnum := vc_divnum || ',' || vc_tmp;
else
vc_divnum := vc_tmp;
end if;
vn_sum := vn_sum + to_number(vc_tmp);
i := i + 1;
end loop;
update tmp_whf_testkkk tk set tk.divnum = vc_divnum, tk.sum = vn_sum where tk.num = vc_num and tk.rowid = v_rid;
fetch c_num into vc_num, v_rid;
vc_divnum := '';
i := 1;
vn_sum := 0;
end loop;
commit;
close c_num;
end;