如何更新oracle11g中的第二行?

时间:2015-03-14 06:30:12

标签: oracle11g

我尝试了这个请求:

UPDATE studentTble e SET e.oStudent.oPerson.oAddr.city='UK' WHERE rownum = 2
ID          NAME               STREET   CITY
100 --------Henrry.Student-----ST 17.---NY
101 --------Samm.Student-------ST 17D.--OR
102 --------Hanna.Student------ST 25D.--MX

1 个答案:

答案 0 :(得分:0)

  

WHERE rownum = 2

这不是ROWNUM的工作原理。除非Oracle将rownum分配给第一行,否则Rownum不会增加到2。因此,WHERE ROWNUM = 2将返回无行,因为在这种情况下,rownum永远不会超过1。

  

如何更新oracle11g中的第二行?

除非您有一组有序的行,否则没有任何内容称为第N 行。在您的情况下,如果您在 ID 列上有明确的 ORDER BY ,默认情况下会按升序排列,那么您可以从子查询中选择第二行

UPDATE studenttble e 
SET    e.ostudent.operson.oaddr.city = 'UK' 
WHERE  id = (SELECT id 
             FROM   (SELECT id, 
                            ROWNUM rn 
                     FROM   (SELECT id, 
                                    ROWNUM rn 
                             FROM   studenttble 
                             ORDER  BY id)) 
             WHERE  rn = 2)

您还可以使用 ANALYTIC ROW_NUMBER()为按ID列排序的每一行分配排名。