如何通過rownum對錶的不同範圍進行批量更新update

wisdomone1發表於2012-11-10
SQL> desc t_order;
Name       Type          Nullable Default Comments 
---------- ------------- -------- ------- -------- 
ORDER_ID   INTEGER       Y                         
ORDER_NAME VARCHAR2(100) Y  

SQL> select * from t_order;
 
                               ORDER_ID ORDER_NAME
--------------------------------------- --------------------------------------------------------------------------------
                                      1 訂單1
                                      2 訂單2
                                      3 訂單3
                                      4 訂單4
                                      5 訂單5
                                      6 訂單6
                                      7 訂單7
                                      8 訂單8
                                      9 訂單9
                                     10 訂單10
 
10 rows selected
 
SQL> 
SQL> update t_order t
  2     set t.order_name = t.order_name || 'newnew'
  3  where exists (select 1
  4                from (select *
  5                      from (select td.order_id, td.order_name, rownum rn
  6                            from t_order td) td
  7                      where td.rn <= 5
  8                      ) newt
  9               where t.order_id = newt.order_id
 10           )
 11  ;
 
5 rows updated
 
SQL> select * from t_order;
 
                               ORDER_ID ORDER_NAME
--------------------------------------- --------------------------------------------------------------------------------
                                      1 訂單1newnew
                                      2 訂單2newnew
                                      3 訂單3newnew
                                      4 訂單4newnew
                                      5 訂單5newnew
                                      6 訂單6
                                      7 訂單7
                                      8 訂單8
                                      9 訂單9
                                     10 訂單10
 
10 rows selected
 
SQL> rollback;
 
Rollback complete
 
SQL> 
SQL> update t_order t
  2     set t.order_name = t.order_name || 'newnew'
  3  where exists (select 1
  4                from (select *
  5                      from (select td.order_id, td.order_name, rownum rn
  6                            from t_order td) td
  7                      where td.rn between 6 and 10
  8                      ) newt
  9               where t.order_id = newt.order_id
 10           )
 11  ;
 
5 rows updated
 
SQL> select * from t_order;
 
                               ORDER_ID ORDER_NAME
--------------------------------------- --------------------------------------------------------------------------------
                                      1 訂單1
                                      2 訂單2
                                      3 訂單3
                                      4 訂單4
                                      5 訂單5
                                      6 訂單6newnew
                                      7 訂單7newnew
                                      8 訂單8newnew
                                      9 訂單9newnew
                                     10 訂單10newnew
 
10 rows selected
 
                       

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-748895/,如需轉載,請註明出處,否則將追究法律責任。

相關文章