在Oracle数据库中存有一串数据(Ori_Seq),数据包含不等量重复:

 

 

为方便查看与管理,现希望添加一字段(New_Seq),在原有数据的末尾为其添加一串序号,相同数据序号从小到大排列,序号长度为三位。

处理结果如下:

 

 

使用存储过程处理,代码如下:

 

 1 CREATE OR REPLACE PROCEDURE PROC_addseq(prm_AppCode Out NUMBER,
 2                                         prm_ErrMsg  Out Varchar2) IS
 3 
 4   CURSOR Demo IS
 5     select distinct t.ori_seq from demo t order by t.ori_seq; --新建游标Demo
 6 
 7 BEGIN
 8 
 9   prm_AppCode := 0;
10   prm_ErrMsg  := '';
11 
12   BEGIN
13     FOR c1 IN Demo LOOP
14       BEGIN
15       
16         update demo t
17            set t.new_seq = t.ori_seq || '-' ||
18                            substr(cast(1000 + rownum as char(4)), 2, 3)
19          where t.ori_seq = c1.ori_seq;
20         --更新new_seq数据
21         /*
22         *number类型不能使用0开头
23         *增加一位数字作为开头
24         *使用cast将number转换为char类型
25         *再截取后三位作为添加序列
26         */
27       
28         dbms_output.put_line(c1.ori_seq || ' has been finished');
29         --输出更新进度
30         commit;
31         --提交
32       
33       EXCEPTION
34         WHEN OTHERS THEN
35           prm_AppCode := -1;
36           prm_ErrMsg  := 'Error! ' || SQLERRM;
37           RETURN;
38           --输出错误提示
39       
40       END;
41     END LOOP;
42   END;
43 END PROC_Addseq;

 

执行后可见更新进度:

 

 

排序查看结果如下: