数字字符串拆分

 

今天写了个过程,实现了这么一个功能:
对数字字符串,如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;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值