通过从表中查找值来按顺序重置Last_NUMBER

问题描述 投票:0回答:1

我有一个名为 SEQ_SYNTAX 的序列。我需要通过从另一个名为 INCREMENTS 的表中查找值来设置该序列的 last_number 值。我可以通过执行 SELECT LASTVAL FROM INCRMENTS WHERE TABLE = 'SYNTAX';

从增量表中获取值

如何编写一个可以设置该序列值的简单 SQL 脚本?假设如果 table = 'SYNTAX' 的增量表中的 Lastval 为 3000,我想将序列 SEQ_SYNTAX 的 Last_number 设置为 3000。

谢谢你。

oracle plsql sequence
1个回答
0
投票

从 12c 开始,您可以简单地重置起始值。以编程方式执行此操作将需要 PL/SQL,因此我们必须使用

EXECUTE IMMEDIATE
,因为
ALTER SEQUENCE
是 DDL:

   DECLARE
     var_sequence_name varchar2(128) := 'SEQ_SYNTAX';
     var_new_value integer;
   BEGIN
     SELECT MAX(lastval)
       INTO var_new_value
       FROM increments
      WHERE "TABLE" = 'SYNTAX';
      
     IF var_new_value > 0
     THEN
       EXECUTE IMMEDIATE 'alter sequence "'||var_sequence_name||'" restart start with '||v_new_value;
     END IF;
   END;   

如果您是 12c 之前的版本,如果新值低于当前值,则必须删除并重新创建序列,或者如果新值更大,则使用脚本进行虚拟前进,直到达到新值。这很麻烦,所以我们很感谢 12c 的增强功能。

© www.soinside.com 2019 - 2024. All rights reserved.