Oracle - 不使用rowid只更新一行

时间:2016-05-19 08:42:24

标签: oracle

我正在尝试update view表,但只是第一个结果。 我不能使用rowid - 不在view表上工作。 有没有办法只更新第一个row?正如我所说的rowid 解决方案无法运作。 select查询示例:

select addr
from addrView
where (tl = '7' and tr = '2')

返回4 results,但在使用update

update addrView
set home='current'
where (tl = '7' and tr = '2')

我仍然希望升级第一行。

1 个答案:

答案 0 :(得分:3)

ROWID是数据库中每行的唯一标识符。

ROWNUM是结果集中每一行的唯一标识符。

您应该使用ROWNUM版本,但是您需要ORDER BY来强制执行排序顺序,否则您将无法保证查询返回的“第一”行是什么你可能正在更新另一行。

update addrView
set home='current'
where (tl, tr) = (
   select tl, tr 
   from (select tl, tr
         from addrView 
         where (tl = '7' and tr = '2')
         order by col_1
             , col_2
             , col_3 etc.
        ) result_set
    where rownum = 1);

但是,如果您不关心查询返回的第一行中的数据,那么您只能使用rownum = 1

update addrView
set home = 'current'
where (tl = '7' and tr = '2')
    and rownum = 1;