PostgreSql 的 RETURNING 一个使用经验
发布时间:2020-12-13 17:05:08 所属栏目:百科 来源:网络整理
导读:PostgreSql 的 RETURNING 是在insert 和update操作的时候 可以制定需要的返回。 具体手册:http://www.postgres.cn/docs/9.4/sql-insert.html 我的需求是生成一个有规则的内部订单号,规则为 (字符+日期+6位数字),其中数字每天都从000001开始自增。 对于
PostgreSql 的 RETURNING 是在insert 和update操作的时候 可以制定需要的返回。 具体手册:http://www.postgres.cn/docs/9.4/sql-insert.html 我的需求是生成一个有规则的内部订单号,规则为 (字符+日期+6位数字),其中数字每天都从000001开始自增。 对于一个精简主义的人来说,这个逻辑如果用java代码写感觉不太爽,同时要考虑并发的问题。 RETURNING帮了一个大忙
针对这个需求我设计了一个四个字段的订单号配置表,同时建立一个组合主键
用RETURNING可以直接将满足规则的号码直接生成 <select id="updateOrderNo" resultType="String"> UPDATE t_order_no set last_code=last_code+1,update_time=now() WHERE middle_code = CURRENT_DATE and first_code = #{firstCode} RETURNING first_code||to_char(middle_code,'YYYYMMDD')||to_char(last_code,'FM000000') as order_no </select> <select id="addOrderNo" resultType="String"> INSERT into t_order_no values (#{firstCode},CURRENT_DATE,#{lastCode},now()) RETURNING first_code||to_char(middle_code,'FM000000') as order_no </select>
逻辑很简单 先更新一次当天的数据,如果返回为null,则表示当天还没有新的数据,则新增一条数据并返回 public String getOrderNo(String firstCode){ String orderNo = orderNoMapper.updateOrderNo(firstCode,null); if(Strings.isNullOrEmpty(orderNo)){ orderNo = orderNoMapper.addOrderNo(firstCode,null,1); } return orderNo; }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |