我在http://haacked.com/archive/2004/02/28/sql-auto-increment.aspx上发现了以下方法,但PL/SQL没有运气。有什么想法吗?增加变量的PL/SQL更新
update table
set table.column = var1 = var1 + 1
where table.column2 = "value';
它似乎不喜欢VAR1的递增下半年OD的集线
我在http://haacked.com/archive/2004/02/28/sql-auto-increment.aspx上发现了以下方法,但PL/SQL没有运气。有什么想法吗?增加变量的PL/SQL更新
update table
set table.column = var1 = var1 + 1
where table.column2 = "value';
它似乎不喜欢VAR1的递增下半年OD的集线
这可能会更好地为您:
update table
set table.column = table.column + 1
where table.column2 = "value';
听起来像是你需要的是什么@沃尔夫说,一个序列。否则你可以这样做:
update table
set table.column =
(select max(table.column) + 1
from table)
where table.column2 = "value';
希望column2值是唯一的,否则你会得到重复。
一点PL/SQL来保存原始的最大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;
这会给你一个唯一的ID为COL1它不会碰撞COL1 COL2为其他值。
根据您所提供的链接是怎么回事,我想你真正想要的是这样的:
update your_table
set your_table.column = rownum
where your_table.column2 = 'value';
这将在表中的“价值”的每一行设置为一个唯一的整数开始, 1.这些值只对该值唯一。您可以将rownum添加到当前的最大值,以将它们设置为大于任何现有值(如在@ APC的答案中所见)。
需要注意的是,如果在该列上有多次插入和/或更新的可能性同时发生,这是不安全的(也就是说,将其作为一次性修复可能是可以的,但它不应该是一个常规例程(当然不应该用于代码中))。在这种情况下,你一定要使用一个序列。
我应该提到,通过查找此表中的table.column的最大值来设置上面的var1。 – typhoid
还有一个类似的问题[这里](http://stackoverflow.com/questions/4749669/variable-manipulation-in-oracle/4751469#4751469)。 – Allan