我在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
答案 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值是唯一的,否则你将获得重复。