CREATE SEQUENCE

CREATE SEQUENCE 陳述式會在應用程式伺服器上建立序列。

呼叫

此陳述式可以內嵌在應用程式中,或以互動方式發出。 它是可動態準備的可執行陳述式。

授權

陳述式的授權 ID 所保留的專用權必須至少包含下列其中一項:

陳述式的授權 ID 所保留的專用權必須至少包含下列其中一項:

  • 下列系統權限:
    • *USE 至「建立資料區 (CRTDTAARA)」指令
  • 資料庫管理者權限

陳述式的授權 ID 所保留的專用權必須至少包含下列其中一項:

  • 對於 SYSSEQOBJECTS 型錄表格:
    • 表格的 INSERT 專用權,以及
    • 綱目 QSYS2 的 USAGE 專用權
  • 資料庫管理者權限

如果參照特殊類型,則陳述式的授權 ID 所保留的專用權必須至少包括下列其中一項:

  • 對於陳述式中所識別的特殊類型:
    • 特殊類型的 USAGE 專用權,以及
    • 包含特殊類型之綱目的 USAGE 專用權
  • 資料庫管理者權限

若要取代現有的順序,陳述式的授權 ID 所保留的專用權必須至少包含下列其中一項:

  • 下列系統權限:
    • 與順序相關之資料區的 *OBJMGT 系統權限
    • 捨棄順序所需的所有權限
    • SYSSEQOBJECTS 型錄表格的系統權限 *READ
  • 資料庫管理者權限

如需對應於 SQL 專用權之系統權限的相關資訊,請參閱 檢查順序的專用權時對應的系統權限檢查特殊類型的專用權時對應的系統權限

語法

讀取語法圖跳過視覺化語法圖CREATEOR REPLACESEQUENCE序列名稱FOR SYSTEM NAME系統物件 IDASINTEGER資料類型START WITH數值常數INCREMENT BY1數值常數NO MINVALUEMINVALUE數值常數NO MAXVALUEMAXVALUE數值常數NO CYCLECYCLECACHE20NO CACHECACHE整數常數NO ORDERORDER1
附註:
  • 1 不得多次指定相同的子句。
資料類型
讀取語法圖跳過視覺化語法圖內建類型distinct-type-name
內建類型
讀取語法圖跳過視覺化語法圖SMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)(整數,0)

說明

或替換
指定要取代順序的定義 (如果現行伺服器中有定義的話)。 在型錄中取代新定義之前,會有效地捨棄現有定義,但不會影響對序列所授與的專用權除外。 如果現行伺服器上不存在序列的定義,則會忽略此選項。
sequence-name
為序列命名。 名稱 (包括隱含或明確限定元) 不得識別已存在於現行伺服器上的序列或資料區。 如果指定完整序列名稱,則 schema-name 不能是 QSYS2、QSYS 或 SYSIBM。

如果指定 SQL 名稱,則會在隱含或明確限定元指定的綱目中建立順序。

如果已指定系統名稱,則會在限定元指定的綱目中建立順序。 如果不合格:

  • 如果 CURRENT SCHEMA 特別暫存器的值是 *LIBL ,則會在現行檔案庫 (*CURLIB) 中建立順序。
  • 否則,將在現行綱目中建立順序。
FOR SYSTEM NAME system-object-identifier
識別序列的 system-object-identifiersystem-object-identifier 不得與現行伺服器上已存在的序列或資料區相同。 system-object-identifier 必須是不完整的系統 ID。

當指定 system-object-identifier 時, sequence-name 不能是有效的系統物件名稱。

AS 資料類型
指定要用於序列值的資料類型。 資料類型可以是小數位數為零的任何確切數值類型 (SMALLINT、INTEGER、BIGINT、DECIMAL 或 NUMERIC) ,或來源類型為小數位數為零的確切數值類型的使用者定義特殊類型。 預設值為 INTEGER。
內建類型
指定內建資料類型,作為序列內部表示法的基礎。 如果資料類型為 DECIMAL 或 NUMERIC ,則精準度必須小於或等於 63 ,且小數位數必須為 0。 如需每一種內建資料類型的更完整說明,請參閱 CREATE TABLE

如需跨平台的應用程式可攜性,請使用 DECIMAL 而非 NUMERIC 資料類型。

distinct-type-name
指定序列的資料類型是特殊類型 (使用者定義的資料類型)。 如果來源類型是 DECIMAL 或 NUMERIC ,則序列的精準度是特殊類型之來源類型的精準度。 來源類型的精準度必須小於或等於 63 ,且小數位數必須為 0。 如果指定特殊類型名稱時沒有指定綱目名稱,則會在 SQL 路徑上搜尋綱目來解析特殊類型名稱。
從開始 數值常數
指定為序列產生的第一個值。 該值可以是任何正或負值,可以指派給與序列相關聯之資料類型的直欄,小數點右側沒有非零數字。

如果在定義序列時未明確指定值,則預設值為遞增序列的 MINVALUE ,而遞減序列的 MAXVALUE。

此值不一定是序列達到序列的最大值或最小值之後循環的值。 START WITH 子句可用來啟動用於循環的範圍以外的序列。 用於循環的範圍由 MINVALUE 和 MAXVALUE 定義。

INCREMENT BY 數值常數
指定序列連續值之間的間隔。 值可以是可指派給與序列相關聯之資料類型直欄的任何正或負值,且不超出大整數常數的值,小數點右側沒有非零數字。

如果值是 0 或正數,則這是遞增順序。 如果值是負數,則這是遞減順序。 預設值是 1。

無 MINVALUE MINVALUE
指定遞減順序在達到最大值之後循環或停止產生值的最小值,或遞增順序在達到最大值之後循環。 預設值是 NO MINVALUE。
無 MINVALUE
若為遞增順序,該值為 START WITH 值,若未指定 START WITH ,則為 1。 對於遞減順序,該值是與順序相關聯的資料類型 (以及精準度,如果 DECIMAL 或 NUMERIC) 的最小值。
MINVALUE 數值常數
指定為最小值的數值常數。 此值可以是任何正或負值,可指派給與序列相關聯的資料類型直欄,且小數點右側沒有非零數字。 值必須小於或等於最大值。
無 MAXVALUE MAXVALUE
指定在達到最小值之後,遞增順序循環或停止產生值,或遞減順序循環至的最大值。 預設值為 NO MAXVALUE。
無 MAXVALUE
若為遞增順序,該值是與順序相關聯的資料類型 (以及精準度,如果 DECIMAL 或 NUMERIC) 的最大值。 若為遞減順序,該值為 START WITH 值,若未指定 START WITH ,則為 -1。
MAXVALUE 數值常數
指定數值常數,其為最大值。 此值可以是任何正或負值,可指派給與序列相關聯的資料類型直欄,且小數點右側沒有非零數字。 該值必須大於或等於最小值。
NO CYCLECYCLE
指定一旦達到順序的最大值或最小值,此順序是否應繼續產生值。 預設值為 NO CYCLE。
無週期
指定一旦達到序列的最大值或最小值,就不會產生序列的值。
循環
指定在達到最大值或最小值之後,繼續產生此序列的值。 如果使用此選項,則在遞增序列達到序列的最大值之後,它會產生其最小值。 在遞減序列達到其序列的最小值之後,它會產生其最大值。 直欄的最大值和最小值會決定用於循環的範圍。

當 CYCLE 生效時,可能會產生序列的重複值。

快取無快取
指定是否將部分預先配置值保留在記憶體中。 在快取中預先配置及儲存值可增進 NEXT VALUE 序列表示式的效能。 預設值為 CACHE 20。
CACHE 整數常數
指定預先配置並保留在記憶體中的順序值數目上限。 在快取中預先配置及儲存值可增進效能。

在某些狀況下 (例如系統失效) ,所有未在已確定陳述式中使用的快取順序值都會遺失,因此永遠不會使用。 為 CACHE 選項指定的值是在這些狀況下可能遺失的順序值數目上限。

可指定的最小值為 2。

無快取
指定不預先配置順序的值。 如果指定 NO CACHE ,則 NEXT VALUE 序列表示式的效能會比指定 CACHE 還要差。
ORDERNO ORDER
指定是否必須依要求順序產生順序值。 預設值為 NO ORDER。
無 ORDER
指定不需要依要求順序產生序號。
ORDER
指定依要求順序產生序號。 如果指定 ORDER ,則 NEXT VALUE 序列表示式的效能會比指定 NO ORDER 還要差。

附註

順序屬性: 建立順序作為 *DTAARA 物件。 不應使用「變更資料區 (*CHGDTAARA)」或任何其他類似介面來變更 *DTAARA 物件,因為這樣做可能會在嘗試透過 SQL 使用 SQL 序列時造成非預期的失敗或非預期的結果。

順序所有權: 順序的 擁有者 是執行陳述式之 執行緒 的使用者設定檔或群組使用者設定檔。

順序權限: 如果使用 SQL 名稱,則會以 *EXCLUDE 在 *PUBLIC 上的系統權限建立順序。 如果使用系統名稱,則會使用綱目的建立權限 (CRTAUT) 參數所決定的 *PUBLIC 權限來建立順序。

如果順序的擁有者是群組設定檔 (GRPPRF 關鍵字) 的成員,且已指定群組權限 (GRPAUT 關鍵字) ,則該群組設定檔也將具有順序的權限。

REPLACE 規則: 當 REPLACE 重建序列時:
  • 會捨棄任何現有的註解或標籤。
  • 已維護授權使用者。 物件擁有者可以變更。
  • 保留現行異動日誌審核。

MINVALUE 和 MAXVALUE 的關係: 通常, MINVALUE 會小於 MAXVALUE ,但這不是必要的。 MINVALUE 可能等於 MAXVALUE。 如果 START WITH 是與 MINVALUE 和 MAXVALUE 相同的值,且隱含或明確指定 CYCLE ,則這會是常數序列。 在此情況下,下一個值的要求似乎沒有作用,因為序列所產生的所有值實際上都是相同的。

MINVALUE 不得大於 MAXVALUE

定義常數序列: 可以定義一律會傳回常數值的序列。 您可以指定 INCREMENT 值零和 START WITH 值不超過 MAXVALUE ,或指定 START WITH、MINVALUE 和 MAXVALUE 的相同值來執行此動作。 對於常數順序,每次處理 NEXT VALUE 表示式時,都會傳回相同的值。 常數序列可用作數值廣域變數。 ALTER SEQUENCE 可用來調整將為常數序列產生的值。

定義循環的序列: 可以使用 ALTER SEQUENCE 陳述式來手動循環序列。 如果隱含或明確指定 NO CYCLE ,則可以使用 ALTER SEQUENCE 陳述式來重新啟動或延伸順序,以在達到順序的最大值或最小值之後繼續產生值。

可透過指定 CYCLE 關鍵字來明確定義序列以循環。 在定義序列時使用 CYCLE 選項,以指出產生的值應該在達到界限時循環。 當序列定義為自動循環時 (例如明確指定 CYCLE) ,如果增量是 1 或 -1 以外的值,則為序列產生的最大值或最小值可能不是實際指定的 MAXVALUE 或 MINVALUE。 例如,以 START WITH=1、 INCREMENT=2、 MAXVALUE=10 定義的順序將產生最大值 9 ,而不會產生值 10。

使用 CYCLE 定義序列時,任何應用程式轉換工具 (用於將應用程式從其他供應商平台轉換為 Db2®) 也應該明確指定 MINVALUE、MAXVALUE 和 START WITH。

快取序號: 可以將一系列序號保留在記憶體中,以便快速存取。 當應用程式存取可從快取配置下一個序號的序列時,序號配置可以快速進行。 不過,如果應用程式存取無法從快取配置下一個序號的序列,則序號配置將需要更新 *DTAARA 物件。

為 CACHE 選擇高值可讓您更快速地存取更連續的序號。 不過,如果失敗,快取中的所有順序值都會遺失。 如果使用 NO CACHE 選項,序列的值不會儲存在序列快取中。 在此情況下,每次存取順序都需要更新 *DTAARA 物件。 應該選擇 CACHE 的值,不要在效能與應用程式需求之間進行取捨。

最近產生序列值的持續性: 資料庫管理程式會記住 SQL 階段作業內某序列最近產生的值,並針對指定序列名稱的 PREVIOUS VALUE 表示式傳回此值。 該值會持續保存,直到為序列產生下一個值、捨棄、變更或取代順序,或直到應用程式階段作業結束為止。 此值不受 COMMIT 及 ROLLBACK 陳述式的影響。

前一個值定義為在應用程式階段作業內具有線性範圍。 因此,在巢狀應用程式中:

  • 在進入巢狀函數、程序或觸發程式時,巢狀應用程式會繼承序列最近產生的值。 也就是說,在巢狀應用程式中指定 PREVIOUS VALUE 表示式的呼叫,將反映在進入巢狀應用程式之前在呼叫應用程式、常式或觸發程式中完成的順序活動。 如果在呼叫應用程式、常式或觸發程式中尚未執行所指定順序的 NEXT VALUE 表示式,則在巢狀應用程式中呼叫 PREVIOUS VALUE 表示式會導致錯誤。
  • 從函數、程序或觸發程式返回時,呼叫應用程式、常式或觸發程式將受到函數、程序或觸發程式中任何序列活動的影響。 也就是說,從巢狀應用程式傳回之後,在呼叫應用程式、常式或觸發程式中呼叫 PREVIOUS VALUE 將反映在較低層次應用程式中發生的任何順序活動。

順序日誌登載: 建立順序時,如果順序建立在應該隱含啟動日誌登載的指定 (使用 STRJRNLIB 指令) 綱目中,則可能會自動啟動日誌登載。

替代語法: 下列關鍵字是其他 Db2 產品舊版相容性所支援的同義字。 這些關鍵字非標準且不應使用:

  • 關鍵字 NOMINVALUE、NOMAXVALUE、NOCYCLE、NOCACHE 及 NOORDER 可用作 NO MINVALUE、NO MAXVALUE、NO CYCLE、NO CACHE 及 NO ORDER 的同義字。
  • 可以使用逗點來區隔多個序列選項。

範例

建立稱為 ORG_SEQ 的序列,從 1 開始,增量為 1 ,不循環,且一次快取 24 個值:

  CREATE SEQUENCE ORG_SEQ
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO CYCLE
    CACHE 24

選項 START WITH 1、INCREMENT 1、NO MAXVALUE 和 NO CYCLE 是未明確指定時已使用的值。