-4

在不改变表结构的情况下为列填充序列中的数字 - 需要查询

4

1 回答 1

0

如果您不想更改或更改数据库表结构,实际上您的解决方案有限。

第一个选项可能是使用序列对象

create sequence mySequence increment by 1;

拥有序列对象后,您可以在需要此字段值时从该序列中读取

select mySequence.nextval from dummy;

不幸的是,每次读取都会增加序列的当前值。这意味着如果您读取但未将值插入表中,则下次插入新行时,表列中会出现间隙。或者,如果您从两个不同的执行中插入两行,一个可能先读取序列,但插入值晚于另一个线程;那么序列将像 11,12, 14,13 ,15

第二个选项是在插入语句之后创建数据库表触发器。然后您可以从表列(或可以存储在单独的表中)或序列中获取最大值,并使用此序列数据更新列字段

于 2018-08-06T07:18:47.700 回答