在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;
执行后可见更新进度:
排序查看结果如下: