在Oracle数据库中存有一串数据(Ori_Seq),数据包含不等量重复:
为方便查看与管理,现希望添加一字段(New_Seq),在原有数据的末尾为其添加一串序号,相同数据序号从小到大排列,序号长度为三位。
处理结果如下:
使用存储过程处理,代码如下:
CREATE OR REPLACE PROCEDURE PROC_addseq(prm_AppCode Out NUMBER,
prm_ErrMsg Out Varchar2) IS CURSOR Demo IS
select distinct t.ori_seq from demo t order by t.ori_seq; --新建游标Demo BEGIN prm_AppCode := 0;
prm_ErrMsg := ''; BEGIN
FOR c1 IN Demo LOOP
BEGIN update demo t
set t.new_seq = t.ori_seq || '-' ||
substr(cast(1000 + rownum as char(4)), 2, 3)
where t.ori_seq = c1.ori_seq;
--更新new_seq数据
/*
*number类型不能使用0开头
*增加一位数字作为开头
*使用cast将number转换为char类型
*再截取后三位作为添加序列
*/ dbms_output.put_line(c1.ori_seq || ' has been finished');
--输出更新进度
commit;
--提交 EXCEPTION
WHEN OTHERS THEN
prm_AppCode := -1;
prm_ErrMsg := 'Error! ' || SQLERRM;
RETURN;
--输出错误提示 END;
END LOOP;
END;
END PROC_Addseq;
执行后可见更新进度:
排序查看结果如下: