ID自增存储过程

(一)简单流水号ID自增

FUNCTION Get_Id_ () RETURN VARCHAR2
IS
id_ VARCHAR2(200);
--- 新建游标,查询出表ID最大流水号
CURSOR get_max_no IS
SELECT nvl(max(to_number(id)),0) + 1
FROM test_table;
BEGIN
--- 打开游标
OPEN get_max_no;
--- 将值赋给定义的id变量
FETCH get_max_no INTO id_;
--- 关闭游标
CLOSE get_max_no;
 --- 查询id值,如果不满四位则前面已0补齐
id_ := lpad(''||id_,4,'0');
--- 返出值
RETURN id_;
END Get_Id_;
  
(二)有编码规则拼接成的ID自增
FUNCTION Get_Id_ (
proj_no_ IN VARCHAR2,
commodity_code_locator_ IN VARCHAR2) RETURN VARCHAR2
IS
id_ VARCHAR2(200);
--- 新建游标,根据项目号和定位码查询出表ID最大流水号
CURSOR get_max_no IS
--- 首先通过substr截取到dcf_code最后四位的值,再转换为number,然后+1 。
SELECT nvl(max(to_number(substr(dcf_code,-4))),0) + 1
FROM test_table
WHERE proj_no = proj_no_
AND commodity_code_locator = commodity_code_locator_;
BEGIN
--- 打开游标
OPEN get_max_no;
--- 将值赋给定义的id变量
FETCH get_max_no INTO id_;
--- 关闭游标
CLOSE get_max_no;
  --- 查询id数,如果不满四位则前面已0补齐
id_ := lpad(''||id_,4,'0');
--- 返出值
RETURN id_;
END Get_Id_;
 
  写好方法后,在insert之前给id按编码规则重新拼接赋值,列如:
  id_ :=Get_Id_();
  id := '项目号'||‘-’||‘定位码’||‘-’||id_
 
(三)按日期生成ID自增
FUNCTION Get_Id_ (
proj_no_ IN VARCHAR2) RETURN VARCHAR2
IS
id_ VARCHAR2(200);
--- 新建游标,根据项目号查询出表ID最大流水号
CURSOR get_max_no IS
--- 首先通过substr截取到rectification_no最后三位的值,然后+1 。
SELECT nvl(max(substr(rectification_no,-3)),0) + 1
FROM test_table
--- rectification_no是不同值拼接而成,现在截取到‘-’后面六位值,判断是否等于当月。
WHERE SUBSTR(rectification_no,INSTR(rectification_no,'-',1,5)+1 ,6) = to_char(sysdate,'YYYYMM')
AND proj_no = proj_no_;
BEGIN
--- 打开游标
OPEN get_max_no;
--- 将值赋给定义的id变量
FETCH get_max_no INTO id_;
--- 关闭游标
CLOSE get_max_no;
   --- 查询id数,如果不满三位则前面已0补齐
id_ := lpad(''||id_,3,'0');
RETURN id_;
--- 返出值
END Get_Id_;
写好方法后,在insert之前给id按编码规则重新拼接赋值,列如:
  id_ :=Get_Id_(proj_id);
  id := '项目号'||‘-’||‘定位码’||‘-’||‘通讯代码’||‘-’||‘A’||‘-’||‘唯一码’||‘-’||to_char(SYSDATE,'YYYYMM')|| id_;

转载于:https://www.cnblogs.com/liangcw-26/p/11010198.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值