Oracle

Oracle - 使用 CONNECT 同步序列 nextval - 副作用?

  • April 30, 2019

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}
);

問題

  1. 呼叫此 SQL 是否有任何副作用 - 因為該關鍵字CONNECT用於與 DB 建立連接?
  2. 有沒有更有效的方法來完成這項任務?

有用的連結

Oracle - CONNECT 關鍵字 - 參考

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

引用自:https://dba.stackexchange.com/questions/237022