增量变量的PL/SQL更新

增量变量的PL/SQL更新,sql,oracle,variables,plsql,sql-update,Sql,Oracle,Variables,Plsql,Sql Update,我在上找到了以下方法,但在PL/SQL方面没有成功。有什么想法吗 update table set table.column = var1 = var1 + 1 where table.column2 = "value'; 似乎不喜欢在设置行的下半部分增加var1这可能对您更合适: update table set table.column = table.column + 1 where table.column2 = "value'; 听起来你需要的是@Wolf说的,一个

我在上找到了以下方法,但在PL/SQL方面没有成功。有什么想法吗

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

似乎不喜欢在设置行的下半部分增加var1这可能对您更合适:

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值是唯一的,否则您将得到重复的值。

使用一点PL/SQL来保存原始的max ID。使用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,它不会与COL2的其他值的COL1冲突。

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

update your_table    
set your_table.column = rownum
where your_table.column2 = 'value';
这将表中“value”的每一行设置为一个唯一的整数,从1开始。但是,这些值仅对该值是唯一的。您可以将rownum添加到当前的max值,以将它们设置为大于任何现有值(如@APC的答案所示)


需要注意的是,如果此列上有可能同时发生多个插入和/或更新,那么这样做是不安全的(也就是说,可以一次性修复,但不应该是常规例程(当然也不应该在代码中使用))。在这种情况下,您肯定应该使用序列。

很抱歉,我不能这样做,因为table.column中的当前值不是唯一的。这种方法只需将它们的值增加一步。我真正需要的是一种使这些特定列(其中column2=“value”)在每个记录的所有列值中唯一的方法。@typoid:我不确定在这种情况下您的具体需要是什么,但您是否考虑过使用序列?序列可以保证值的唯一性,而不需要查找最大值。如果你还需要组合“<代码>表”,列和<代码>表。Culn2唯一,那么你也应该考虑给这对列添加一个唯一的约束。我应该提到VAR1是通过查找表中的最大值来设置的。列在这个表中。有一个类似的问题。