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

inkz8wg9  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(94)

我有一个序列叫做SEQ_SYNTAX。我需要通过从另一个名为INCREMENTS的表中查找一个值来设置这个序列的last_number值。我可以通过执行SELECT LASTVAL FROM INCREMENTS WHERE TABLE = 'SYNTAX'从增量表中获取值;
如何编写一个简单的SQL脚本来设置序列值?比如说,如果lastval from increments table where table = 'SYNTAX'是3000,我想把序列SEQ_SYNTAX的last_number设置为3000。
谢谢

xqnpmsa8

xqnpmsa81#

从12 c开始,您可以简单地重置起始值。以编程方式执行它将需要PL/SQL,因此我们必须使用EXECUTE IMMEDIATE,因为ALTER SEQUENCE是一个SQL:

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;

如果你是12 c之前的版本,如果新值低于当前值,你将不得不删除并重新创建序列,或者如果新值更大,则使用脚本进行dummy-advance直到它达到新值。这是一个麻烦,所以我们感谢12摄氏度的增强。

相关问题