有一个表 TB_LOG 到目前为止还没有序列。为该表的 id 列 ID_LOG 添加了序列 SEQ_LOG_ID。 现在必须设置正确的值,以便在添加新条目与现有条目时不会发生冲突。
如何将序列设置为下一个有效值。必须确定正确的数量,因为该语句应该在不同的模式中执行。
alter sequence SEQ_LOG_ID restart start with (select max(ID_LOG) from TB_LOG) + 1);
开始需要一个数字,但选择似乎不起作用。 否则怎么能做到这一点?
一种选择是使用 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>