Oracle
Oracle - 使用 CONNECT 同步序列 nextval - 副作用?
D B
Oracle Database 11g 企業版 11.2.0.4.0 - 64 位
行動
在數據遷移之後 - 從舊表到新表 - 我們創建了一個新序列並執行此命令以同步它的下一個值等於表最大 id。
SQL
-- SYNC SEQUENCE WITH TABLE SELECT level, {SEQUENCE_NAME}.NEXTVAL FROM dual CONNECT BY level <= ( SELECT MAX(ID) FROM {TABLE} );
問題
- 呼叫此 SQL 是否有任何副作用 - 因為該關鍵字
CONNECT
用於與 DB 建立連接?- 有沒有更有效的方法來完成這項任務?
有用的連結
CONNECT
在這種情況下,與數據庫連接無關。您可以更改序列的增量以將其設置為所需的值。例子:
SQL> create sequence s1; Sequence created. SQL> select s1.nextval from dual; NEXTVAL ---------- 1 SQL> alter sequence s1 increment by 100; Sequence altered. SQL> select s1.nextval from dual; NEXTVAL ---------- 101 SQL> alter sequence s1 increment by 1; Sequence altered. SQL> select s1.nextval from dual; NEXTVAL ---------- 102
您也可以使用未記錄的
RESTART
子句,但這在 11.2 中不起作用:SQL*Plus: Release 19.0.0.0.0 - Production on Tue Apr 30 12:44:26 2019 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> create sequence s1; Sequence created. SQL> select s1.nextval from dual; NEXTVAL ---------- 1 SQL> alter sequence s1 restart start with 101; Sequence altered. SQL> select s1.nextval from dual; NEXTVAL ---------- 101 SQL> select s1.nextval from dual; NEXTVAL ---------- 102