Oracle update query to update records in sequential order

前端 未结 3 753
孤独总比滥情好
孤独总比滥情好 2021-01-28 14:06

I have a table in Oracle SQL whose ids are in increasing, sequential order, but there are gaps in the ids due to editing, e.g. the ids are currently something like



        
相关标签:
3条回答
  • 2021-01-28 14:27

    You could use a merge, but you'd need to join on something other than emp_id as you want to update that column. If there are no other unique columns you can use the rowid:

    merge into employee target
    using (select rowid, row_number() over (order by emp_id) as emp_id from employee) source
    on (source.rowid = target.rowid)
    when matched then update set target.emp_id = source.emp_id;
    
    0 讨论(0)
  • 2021-01-28 14:28

    This solution to the same question you referenced shows how to do it:

    update employee set emp_id = (
      with tab as (
        select emp_id, rownum r
        from   (select emp_id from employee order by emp_id)
      )
      select r from tab where employee.emp_id = tab.emp_id
    );
    

    That works. You cannot update a view that contains an analytic function like row_number - see Oracle 12C docs, look for "Notes on Updatable Views".

    0 讨论(0)
  • 2021-01-28 14:34

    I think this would be easiest approach :

    update mytable set id = ROWNUM;

    Oracle SQL - update ids in oracle sql to be in sequential order

    0 讨论(0)
提交回复
热议问题