Oracle SQL每隔第n行更新一次

时间:2013-06-21 13:20:54

标签: sql oracle sql-update

要对新表字段进行一些测试,我想假设我的测试数据库中现有记录的某些值。我想为表中的每第8条记录分配一个值。我可以使用以下语法轻松选择每个第8条记录:

select *
from 
  (select rownum rn
    , jeffs_field_to_update
  from jeff)
where mod(rn, 8) = 0;

但是,我对SQL很新,我似乎无法将其转换为更新语句。我在这里看到很多关于选择第n条记录的答案,但我已经知道了。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:5)

您需要将此连接到表中任何键的UPDATE语句。例如,如果您有唯一的id列,则update语句将如下所示:

update jeff
set jeffs_field_to_update = value
where id in
(select id
from 
  (select rownum rn
    , jeff.id
  from jeff)
where mod(rn, 8) = 0)

答案 1 :(得分:4)

答案较短:

UPDATE jeff 
SET jeffs_field_to_update = value 
WHERE mod(DBMS_ROWID.ROWID_ROW_NUMBER(ROWID), 8)=0;

答案 2 :(得分:1)

假设您的表具有标识每一行的唯一ID,您可以执行以下操作:

update jeff
    set . . .
    where id in (select id
                 from (select rownum as rn, id
                       from jeff
                      )
                 where mod(rn, 8) = 0
                )

您还应该能够使用内联可更新视图执行此操作(请参阅here):

update (select jeffs_field_to_update
        from  (select rownum rn, jeffs_field_to_update
              from jeff)
        where mod(rn, 8) = 0
       ) toupdate
    set . . .

答案 3 :(得分:1)

即使没有密钥,也可以在oracle中使用rowid来实现此目的。

update mytable
set mycol = new_value
where rowid in
(select rowid from 
  (select rownum rn, id from mytable)
where mod(rn, 8) = 0)