在 Oracle 19c 中使用简单的 SQL 语句重置序列值

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

有一个表 TB_LOG 到目前为止还没有序列。为该表的 id 列 ID_LOG 添加了序列 SEQ_LOG_ID。 现在必须设置正确的值,以便在添加新条目与现有条目时不会发生冲突。

如何将序列设置为下一个有效值。必须确定正确的数量,因为该语句应该在不同的模式中执行。

alter sequence SEQ_LOG_ID restart start with (select max(ID_LOG) from TB_LOG) + 1);

开始需要一个数字,但选择似乎不起作用。 否则怎么能做到这一点?

sql oracle-database
1个回答
0
投票

一种选择是使用 PL/SQL 块。

顺序:

SQL> create sequence seq_test;

Sequence created.

它的初始值(实际上可以是任何值 - 这可能是你的情况):

SQL> select seq_test.nextval from dual;

   NEXTVAL
----------
         1

PL/SQL 块首先在表中查找 MAX ID 值,将其加 1 并使用

alter sequence
中的“新”值:

SQL> declare
  2    l_max number;
  3  begin
  4    select max(id_email_log) + 1 into l_max from email_log;
  5
  6    execute immediate 'alter sequence seq_test restart start with ' || l_max;
  7  end;
  8  /

PL/SQL procedure successfully completed.

新序列值:

SQL> select seq_test.nextval from dual;

   NEXTVAL
----------
      5179

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