当前位置:Gxlcms > 数据库问题 > Oracle应用之批量递增更新数据脚本

Oracle应用之批量递增更新数据脚本

时间:2021-07-01 10:21:17 帮助过:14人阅读

需求:更新用户表的工号,格式为“GD1,GD2,...”的格式,如果有数据取最大值再递增

E1:先查询出是否有数据,有数据取最大值再递增,使用nvl函数

  1. <code class="language-sql">/* 查询max值*/
  2. select nvl(max(to_number(replace(t.user_num, ‘GD‘, ‘‘))), 0)
  3. from t_user t
  4. where t.user_num like ‘GD%‘;
  5. </code>

E2:创建Oracle序列,start with改为max值

  1. <code class="language-sql">
  2. /* Create sequence,start with改为max值 */
  3. create sequence user_num_t_user
  4. minvalue 1
  5. maxvalue 999999999999999999999999999
  6. start with 200
  7. increment by 1
  8. cache 20;
  9. commit;
  10. /* drop sequence */
  11. drop sequence user_num_t_user;
  12. </code>

E3:批量更新

  1. <code class="language-sql">/* batch update*/
  2. update t_user
  3. set user_num = ‘GD‘ || user_num_t_user.nextval
  4. where user_num is null
  5. and IS_OUTNET_REG = 0;
  6. </code>

E4:如果下次使用序列,记得更改start with的值,因为每次使用都会更新这个值的

上面方法是使用Oracle序列的方法,如果用Oracle的rownum,也是可以实现需求的,脚本如:

  1. <code class="language-sql">update t_user
  2. set user_num = ‘GD‘ ||
  3. (rownum +
  4. (select nvl(max(to_number(replace(t.user_num, ‘GD‘, ‘‘))),
  5. 0)
  6. from base_user t
  7. where t.user_num like ‘GD%‘))
  8. where user_num is null;
  9. </code>

Oracle应用之批量递增更新数据脚本

标签:函数   batch   批量更新   ber   数据   ace   用户表   com   ora   

人气教程排行