时间:2021-07-01 10:21:17 帮助过:14人阅读
需求:更新用户表的工号,格式为“GD1,GD2,...”的格式,如果有数据取最大值再递增
E1:先查询出是否有数据,有数据取最大值再递增,使用nvl函数
- <code class="language-sql">/* 查询max值*/
- select nvl(max(to_number(replace(t.user_num, ‘GD‘, ‘‘))), 0)
- from t_user t
- where t.user_num like ‘GD%‘;
- </code>
E2:创建Oracle序列,start with改为max值
- <code class="language-sql">
- /* Create sequence,start with改为max值 */
- create sequence user_num_t_user
- minvalue 1
- maxvalue 999999999999999999999999999
- start with 200
- increment by 1
- cache 20;
- commit;
- /* drop sequence */
- drop sequence user_num_t_user;
- </code>
E3:批量更新
- <code class="language-sql">/* batch update*/
- update t_user
- set user_num = ‘GD‘ || user_num_t_user.nextval
- where user_num is null
- and IS_OUTNET_REG = 0;
- </code>
E4:如果下次使用序列,记得更改start with的值,因为每次使用都会更新这个值的
上面方法是使用Oracle序列的方法,如果用Oracle的rownum,也是可以实现需求的,脚本如:
- <code class="language-sql">update t_user
- set user_num = ‘GD‘ ||
- (rownum +
- (select nvl(max(to_number(replace(t.user_num, ‘GD‘, ‘‘))),
- 0)
- from base_user t
- where t.user_num like ‘GD%‘))
- where user_num is null;
- </code>
Oracle应用之批量递增更新数据脚本
标签:函数 batch 批量更新 ber 数据 ace 用户表 com ora