我正在使用Oracle 11g。在创建序列时,我遇到了一个问题。
是否可以使用Java回滚一个序列?
如果可以的话,请给我建议。
是的,请使用alter sequence
。请参阅http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_2011.htm。
但请注意,这没有真正的用途。除非您删除使用序列的表中的所有记录,否则在使用序列创建唯一ID时会出现错误。
而且,您生成的数字将始终存在“空洞”,试图使由序列创建的ID连续是没有意义的。想象一下用户A进行插入,用户B进行另一个插入,用户B提交,用户A回滚。A使用的序列号将丢失,因为B使用了更高的序列号。
Sequence
旨在始终生成下一个可能的值。它只能从开头重新启动。无法“回滚”生成的序列,因为另一个进程中的并行会话可能已经增加了它。序列是无状态的。它们被生成后就不知道是否有用。因此,对于您的情况,您可能需要编写自己的逻辑。但要使其“线程安全”几乎是不可能的。 - Maheswaran Ravisankar