如何更新oracle11g中的第二行?

how update the second row in 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

WHERE rownum = 2

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

how update the second row in oracle11g?

没有什么叫做第 Nth 行,除非你有一组有序的行。在您的情况下,如果您在 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 列排序的每一行分配排名。