增加变量的PL / SQL更新

时间:2011-11-08 15:25:35

标签: sql oracle variables plsql sql-update

我在http://haacked.com/archive/2004/02/28/sql-auto-increment.aspx上找到了以下方法,但是PL / SQL没有运气。有什么想法吗?

update table    
set table.column = var1 = var1 + 1    
where table.column2 = "value';

似乎不喜欢在设置行的后半部分增加var1

3 个答案:

答案 0 :(得分:2)

用于保存原始最大ID的一些PL / SQL。使用ROWNUM解决了递增计数的问题:

declare
    n pls_integer;
begin
    select max(col1)
    into n
    from your table;

    update your_table
    set col1 = n + rownum
    where col2 = 'value';
end;

这将为您提供COL1的唯一ID,不会与COL1碰撞其他COL2值。

答案 1 :(得分:2)

根据您提供的链接中发生的情况,我认为您真正想要的是:

update your_table    
set your_table.column = rownum
where your_table.column2 = 'value';

这会将表中“value”的每一行设置为一个唯一的整数,从1开始。但是,该值只对该值唯一。您可以将rownum添加到当前最大值,以将它们设置为大于任何现有值(如@ APC的答案中所示)。

应该注意的是,如果同时发生此列的多次插入和/或更新的可能性,这是不安全的(即,可能可以将此作为一次性修复,但它不应该是常规例程(当然不应该在代码中使用))。在这种情况下,你肯定应该使用一个序列。

答案 2 :(得分:1)

这可能对您更有效:

update table
set table.column = table.column + 1
where table.column2 = "value';

听起来你需要的是@Wolf说的一个序列。否则你可以这样做:

update table
set table.column = 
  (select max(table.column) + 1
   from table)
where table.column2 = "value';

希望column2值是唯一的,否则你将获得重复。