CREATE TABLE 陳述式

CREATE TABLE 陳述式定義表格。 定義必須包含其名稱及其直欄的名稱和屬性。 定義可以包括表格的其他屬性,例如其主要索引鍵或核對限制項。

若要建立所建立的暫存表格,請使用 CREATE GLOBAL TEMPORARY TABLE 陳述式。 若要宣告所宣告的暫存表格,請使用 DECLARE GLOBAL TEMPORARY TABLE 陳述式。

呼叫

此陳述式可以內嵌在應用程式中,或使用動態 SQL 陳述式發出。 它是可執行的陳述式,只有在 DYNAMICRULES 執行行為對套件有效時才能動態準備 (SQLSTATE 42509)。

授權

陳述式的授權 ID 必須具有 DBADM 權限,或者必須具有 CREATETAB 權限與下列其他授權的組合:
  • 下列其中一個專用權或權限:
    • 表格空間上的 USE 專用權
    • SYSADM 權限
    • SYSCTRL 權限
  • 加上下列其中一個專用權或權限:
    • 資料庫上的 IMPLICIT_SCHEMA 權限(如果表格的隱含或明確綱目名稱不存在)。
    • 綱目的 CREATEIN 專用權(如果表格的綱目名稱參照現有綱目)。
    • 綱目上的 SCHEMAADM 權限(如果表格的綱目名稱參照現有綱目)。
如果正在定義子表格,則必須至少符合下列其中一個條件:
  • 授權 ID 必須與表格階層的根表格擁有者相同。
  • 授權 ID 所保留的專用權必須在包含表格階層的根表格的綱目上包括 SCHEMAADM 權限。
  • 授權 ID 所保留的專用權必須包括 DBADM 權限。
若要定義外部索引鍵,陳述式的授權 ID 必須具有母項表格的下列其中一個專用權:
  • 表格的 REFERENCES 專用權
  • 指定母項索引鍵的每一個直欄的 REFERENCES 專用權
  • 表格上的 CONTROL 專用權
  • 綱目上的 SCHEMAADM 權限(如果母項表格的綱目名稱參照現有綱目)。
  • DBADM 權限
若要定義具體化查詢表格,必須符合下列條件:
  • 陳述式的授權 ID 必須在全選中識別的每一個表格或視圖上至少具有下列其中一個專用權(不考量透過群組保留的專用權):
    • 表格或視圖上的 SELECT 專用權
    • 表格或視圖的 CONTROL 專用權
    • 包含表格或視圖之綱目上的 SELECTIN 專用權
    • 包含表格或視圖之綱目上的 DATAACCESS 權限
    • DATAACCESS 權限
  • 對於全選中所識別的每一個表格,陳述式的授權 ID 必須至少具有下列其中一個專用權(這是變更基本表格以將其與具體化查詢表格相關聯的必要項目):
    • 表格或視圖的 ALTER 專用權
    • 表格或視圖的 CONTROL 專用權
    • 包含表格或視圖之綱目上的 SCHEMAADM 權限
    • DBADM 權限
若要定義與具體化查詢表格相關聯的暫置表格,陳述式的授權 ID 必須具有下列專用權:
  • 具體化查詢表格至少具有下列其中一個專用權:
    • 具體化查詢表格上的 ALTER 專用權
    • 具體化查詢表格上的 CONTROL 專用權
    • 包含具體化查詢表格之綱目上的 SCHEMAADM 權限
    • DBADM 權限
  • 針對具體化查詢表格的全選中所識別的每一個表格或視圖,至少具有下列其中一個專用權:
    • 表格或視圖上的 SELECT 專用權
    • 表格或視圖的 CONTROL 專用權
    • 包含表格或視圖之綱目上的 SELECTIN 專用權
    • 包含表格或視圖之綱目上的 DATAACCESS 權限
    • 資料庫的 DATAACCESS 權限
    此外,具體化查詢表格的全選中所識別的每一個表格或視圖至少具有下列其中一個專用權:
    • 表格或視圖的 ALTER 專用權
    • 表格或視圖的 CONTROL 專用權
    • 包含表格或視圖之綱目上的 SCHEMAADM 權限
    • DBADM 權限

語法

Read syntax diagramSkip visual syntax diagram CREATE TABLE IF NOT EXISTS table-name Element-listOFtype-name1typed-table-optionsLIKEtable-name1view-namenicknamecopy-optionsas-result-tablecopy-optionsmaterialized-query-definitionstaging-table-definition ORGANIZE BYROWCOLUMNROW USING1Dimensions-clauseKEY SEQUENCEsequence-key-specINSERT TIME DATA CAPTURENONECHANGES tablespace-clauses distribution-clause partitioning-clause COMPRESS YESADAPTIVECOMPRESS YES STATICCOMPRESS NO VALUE COMPRESSION WITH RESTRICT ON DROP NOT LOGGED INITIALLY CCSIDASCIIUNICODE SECURITY POLICYpolicy name OPTIONS(,table-option-namestring-constant)
Element-list
Read syntax diagramSkip visual syntax diagram ( ,column-definitionperiod-definitionunique-constraintreferential-constraintcheck-constraint )
Column-definition
Read syntax diagramSkip visual syntax diagram column-name Data-type2Column-options
Data-type
Read syntax diagramSkip visual syntax diagramBuilt-in-typedistinct-type-name3structured-type-nameREF( type-name2)
Built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( precision-integer,0, scale-integer)FLOAT(53)( integer)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA4CCSID ASCIICCSID UNICODECCSID 1208CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)CCSID ASCIICCSID UNICODECCSID 1208GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)CCSID ASCIICCSID UNICODECCSID 1208VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( integerKMG)BINARY(1)( integer)VARBINARYBINARY VARYING(integer)BLOBBINARY LARGE OBJECT(1M)( integerKMG)DATETIMETIMESTAMP(6)(integer)XMLBOOLEANSYSPROC.DB2SECURITYLABEL56
Column-options
Read syntax diagramSkip visual syntax diagramNOT NULLLob-options7SCOPEtyped-table-nametyped-view-name8CONSTRAINTconstraint-namePRIMARY KEYUNIQUEReferences-clauseCHECK(check-condition)constraint-attributes9Default-clausegenerated-clauseINLINE LENGTHinteger10COMPRESS SYSTEM DEFAULTCOLUMNSECURED WITHsecurity-label-nameNOT HIDDENIMPLICITLY HIDDEN
Lob-options
Read syntax diagramSkip visual syntax diagram LOGGEDNOT LOGGED NOT COMPACTCOMPACT
References-clause
Read syntax diagramSkip visual syntax diagram REFERENCES table-namenickname (,column-name)rule-clauseconstraint-attributes
Rule-clause
Read syntax diagramSkip visual syntax diagram ON DELETE NO ACTIONON DELETERESTRICTCASCADESET NULL ON UPDATE NO ACTIONON UPDATE RESTRICT
Constraint-attributes
Read syntax diagramSkip visual syntax diagram ENFORCEDNOT ENFORCEDTRUSTEDNOT TRUSTED ENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATION
Default-clause
Read syntax diagramSkip visual syntax diagram WITH DEFAULT Default-values
Default-values
Read syntax diagramSkip visual syntax diagramconstantdatetime-special-registeruser-special-registerCURRENT SCHEMACURRENT MEMBERNULLcast-function(constantdatetime-special-registeruser-special-registerCURRENT SCHEMA)EMPTY_CLOB()EMPTY_DBCLOB()EMPTY_NCLOB()EMPTY_BLOB()
Generated-clause
Read syntax diagramSkip visual syntax diagramGENERATEDALWAYSBY DEFAULTIdentity-optionsas-row-change-timestamp-clauseGENERATEDALWAYSas-generated-expression-clauseas-row-transaction-timestamp-clauseas-row-transaction-start-id-clause
Identity-options
Read syntax diagramSkip visual syntax diagram AS IDENTITY (11START WITH1numeric-constantINCREMENT BY1numeric-constantNO MINVALUEMINVALUEnumeric-constantNO MAXVALUEMAXVALUEnumeric-constantNO CYCLECYCLECACHE 20NO CACHECACHEinteger-constantNO ORDERORDER)
As-row-change-timestamp-clause
Read syntax diagramSkip visual syntax diagram12 FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
As-generated-expression-clause
Read syntax diagramSkip visual syntax diagram AS ( generation-expression )
As-row-transaction-timestamp-clause
Read syntax diagramSkip visual syntax diagram13 AS ROW BEGINEND
As-row-transaction-start-id-clause
Read syntax diagramSkip visual syntax diagram14 AS TRANSACTION START ID
Period-definition
Read syntax diagramSkip visual syntax diagram PERIOD SYSTEM_TIMEBUSINESS_TIME ( begin-column-name , end-column-name )
Unique-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-nameUNIQUEPRIMARY KEY ( ,column-name ,BUSINESS_TIMEWITHOUT OVERLAPS ) constraint-attributes
Referential-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-name FOREIGN KEY ( ,column-name ) references-clause
Check-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-name CHECK ( Check-condition ) constraint-attributes
Check-condition
Read syntax diagramSkip visual syntax diagramsearch-conditionFunctional-dependency
Functional-dependency
Read syntax diagramSkip visual syntax diagram column-name(,column-name) DETERMINED BY column-name(,column-name)
Typed-table-options
Read syntax diagramSkip visual syntax diagram HIERARCHYhierarchy-nameUnder-clause typed-element-list
Under-clause
Read syntax diagramSkip visual syntax diagram UNDER supertable-name INHERIT SELECT PRIVILEGES
Typed-element-list
Read syntax diagramSkip visual syntax diagram ( ,OID-column-definitionwith-optionsunique-constraintcheck-constraint )
OID-column-definition
Read syntax diagramSkip visual syntax diagram REF IS OID-column-name USER GENERATED
With-options
Read syntax diagramSkip visual syntax diagram column-name WITH OPTIONS Column-options
As-result-table
Read syntax diagramSkip visual syntax diagram(,column-name) AS ( fullselect ) WITH NO DATAWITH DATA
Materialized-query-definition
Read syntax diagramSkip visual syntax diagram(,column-name) AS ( fullselect ) refreshable-table-options
Copy-options
Read syntax diagramSkip visual syntax diagram INCLUDINGEXCLUDINGCOLUMNDEFAULTS EXCLUDING IDENTITYCOLUMN ATTRIBUTESINCLUDING IDENTITYCOLUMN ATTRIBUTES
Refreshable-table-options
Read syntax diagramSkip visual syntax diagram DATA INITIALLY DEFERRED REFRESH DEFERREDIMMEDIATE ENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATION MAINTAINED BY SYSTEMMAINTAINED BYUSERREPLICATIONFEDERATED_TOOL
Staging-table-definition
Read syntax diagramSkip visual syntax diagram(,staging-column-name) FOR table-name2 PROPAGATE IMMEDIATE
Dimensions-clause
Read syntax diagramSkip visual syntax diagram DIMENSIONS (,column-name(,column-name))
Sequence-key-spec
Read syntax diagramSkip visual syntax diagram ( ,column-nameSTARTINGFROMconstantENDINGATconstant ) ALLOW OVERFLOWDISALLOW OVERFLOWPCTFREEinteger
Tablespace-clauses
Read syntax diagramSkip visual syntax diagramIN,tablespace-nameCYCLENO CYCLE INDEX INtablespace-name15LONG IN,tablespace-name
Distribution-clause
Read syntax diagramSkip visual syntax diagram DISTRIBUTE BY HASH(,column-name)REPLICATIONRANDOM
Partitioning-clause
Read syntax diagramSkip visual syntax diagram PARTITION BY RANGE Range-partition-spec
Range-partition-spec
Read syntax diagramSkip visual syntax diagram ( ,partition-expression ) ( ,partition-element )
Partition-expression
Read syntax diagramSkip visual syntax diagram column-name NULLS LASTNULLS FIRST
Partition-element
Read syntax diagramSkip visual syntax diagramPARTITIONpartition-nameBoundary-specpartition-tablespace-optionsboundary-specEVERY(constantduration-label16)constantduration-label16
Boundary-spec
Read syntax diagramSkip visual syntax diagramStarting-clause17Ending-clause
Starting-clause
Read syntax diagramSkip visual syntax diagram STARTING FROM (,constantMINVALUEMAXVALUE)constantMINVALUEMAXVALUEINCLUSIVEEXCLUSIVE
Ending-clause
Read syntax diagramSkip visual syntax diagram ENDING AT (,constantMINVALUEMAXVALUE)constantMINVALUEMAXVALUEINCLUSIVEEXCLUSIVE
Partition-tablespace-options
Read syntax diagramSkip visual syntax diagramINtablespace-nameINDEX INtablespace-nameLONG INtablespace-name
Duration-label
Read syntax diagramSkip visual syntax diagramYEARYEARSMONTHMONTHSDAYDAYSHOURHOURSMINUTEMINUTESSECONDSECONDSMICROSECONDMICROSECONDS
Notes:
  • 1 If you specify a dimensions clause, key sequence, or insert time, specifying ROW USING is optional unless the default table organization for the database is COLUMN, in which case specifying ROW USING is mandatory.
  • 2 If the first column-option chosen is a generated-clause with a generation-expression, then the data-type can be omitted. It will be determined from the resulting data-type of the generation-expression.
  • 3 The specified distinct type cannot have any data type constraints and the source type cannot be an anchored data type.
  • 4 The FOR BIT DATA clause can be specified in any order with the other column constraints that follow. The FOR BIT DATA clause cannot be specified with string units CODEUNITS32 (SQLSTATE 42613).
  • 5 DB2SECURITYLABEL is the built-in distinct type that must be used to define the row security label column of a protected table.
  • 6 A column of type DB2SECURITYLABEL, NOT NULL WITH DEFAULT is implicit and cannot be explicitly specified (SQLSTATE 42842). The default value for a column of type DB2SECURITYLABEL is the session authorization ID's security label for write access.
  • 7 The lob-options clause only applies to large object types (BLOB, CLOB, and DBCLOB) and distinct types based on large object types.
  • 8 The SCOPE clause only applies to the REF type.
  • 9 The default-clause and generated-clause cannot both be specified for the same column definition (SQLSTATE 42614).
  • 10 INLINE LENGTH applies only to columns defined as structured, XML, or LOB types.
  • 11 The same clause must not be specified more than once.
  • 12 Data type is optional for a row change timestamp column if the first column-option specified is a generated-clause. The data type default is TIMESTAMP(6).
  • 13 Data type is optional for row-begin and row-end timestamp columns if the first column-option specified is a generated-clause. The data type default is TIMESTAMP(12).
  • 14 Data type is optional for a transaction-start-ID timestamp columns if the first column-option specified is a generated-clause. The data type default is TIMESTAMP(12).
  • 15 Specifying which table space contains a table's indexes can be done when the table is created. If the table is a partitioned table, the index table space for a nonpartitioned index can be specified with the IN clause of the CREATE INDEX statement.
  • 16 This syntax for a partition-element is valid if only one partition-expression exists with a numeric or datetime data type.
  • 17 The first partition-element must include a starting-clause and the last partition-element must include an ending-clause.

說明

除非需要個別識別每一個具體化查詢表格,否則一般術語具體化查詢表格會參照 system-maintained、user-maintained、federated_tool-maintained 及 replication-maintained 的具體化查詢表格(陰影表格)。

IF NOT EXISTS
指定無法建立表格時不顯示任何錯誤訊息,因為現行資料庫及綱目中已存在具有指定名稱的表格。 通常,您會對執行 SQL 指令的 Script 化應用程式使用此選項。 當您抑制Table not found錯誤訊息, Script 化應用程式不受影響或中止。
當您使用此選項時,下列條件適用:
  • 您無法搭配使用 IF NOT EXISTS 選項與 AS SELECT 子句。 搭配使用 IF NOT EXISTS 選項與 AS SELECT 子句會導致語法錯誤。
  • 除非其他錯誤阻止建立表格,否則雖然未建立表格,但會傳回 CREATE TABLE 訊息。 原因是如果具有指定名稱的表格已存在,則會忽略失敗。
  • 系統不會比較指令中現有的表格與指定的表格,亦即,表格可能有不同的大小。 現有表格會依現狀保留其現行大小。 系統不會變更列的內容。 應用程式必須確保目標表格及列符合預期。
table-name
命名表格。 名稱(包括隱含或明確限定元)不得識別型錄中說明的表格、視圖、暱稱或別名。 綱目名稱不能是 SYSIBM、SYSCAT、SYSFUN 或 SYSSTAT (SQLSTATE 42939)。
element-list
定義表格的元素,包括表格上的直欄及限制項的定義。
column-definition
定義直欄的屬性。
column-name
命名表格的直欄。 名稱不能完整,且相同的名稱不能用於表格的多個直欄 (SQLSTATE 42711)。

橫列組織 表格可以具有下列項目:

  • 最多具有 500 個直欄的 4K 頁面大小,其中列大小不得大於 4005。
  • 最多具有 1012 個直欄的 8K 頁面大小,其中列大小不得大於 8101。
  • 16K 頁面大小,最多具有 1012 個直欄,其中列大小不得大於 16,293。
  • 32K 頁面大小,最多具有 1012 個直欄,其中列大小不得大於 32,677。

不論頁面大小, 直欄組織 表格最多可以有 1012 個直欄,其中直欄的位元組計數不得大於 32,677。 延伸列大小支援不適用於 直欄組織 表格。

如需相關資訊,請參閱列大小限制

data-type
指定直欄的資料類型。
built-in-type
下列其中一個內建資料類型:
SMALLINT
小整數。
[INTEGER | INT]
大整數。
BIGINT
大整數。
[DECIMAL | DEC | NUMERIC | NUM] (precision-integerscale-integer)
十進位數。
  • 精準度整數指定總位數。 它必須在 1-31 範圍內。 預設值為 5。
  • 小數位數整數指定小數點右邊的位數。 它不能是負數,也不能超出精準度。 預設值是 5。
FLOAT(integer)
單一或倍精準度浮點數字。 如果指定的長度在範圍內:
  • 1-24,數字使用單一精準度。
  • 25-53,數字使用倍精準度。
您可以指定下列項目,而非 FLOAT:
REAL
適用於單精準度浮點。
DOUBLE
適用於倍精準度浮點。
DOUBLE PRECISION
適用於倍精準度浮點。
FLOAT
適用於倍精準度浮點。
DECFLOAT(precision-integer)
小數浮點數字。 精準度整數指定總位數,可以是 16 或 34。 預設值為 34。
[CHARACTER | CHAR](integer [OCTETS | CODEUNITS32])
指定字碼單位數目的固定長度字串。 此數字的範圍可以是 1-255 個 OCTETS 或 1-63 個 CODEUNITS32。 預設值為 1。
[VARCHAR | CHARACTER VARYING | CHAR VARYING](integer [OCTETS | CODEUNITS32])
可變長度字串,其最大長度為指定的字碼單位數目。 此數字可介於 1-32672 個 OCTETS 或 1-8168 個 CODEUNITS32 之間。
關於位元資料
指定將直欄內容視為位元(二進位)資料。 在與其他系統交換資料期間,不會執行字碼頁轉換。 無論資料庫對照順序為何,都會以二進位來執行比較。
CCSID
指定儲存在直欄中之字串資料的編碼方法。 如果未指定 CCSID 子句,則預設值是表格的 CCSID。
ASCII
指定以資料庫字碼頁編碼字串資料。 如果表格是 Unicode 表格,則無法指定 CCSID ASCII (SQLSTATE 56031)。
UNICODE、1208、1200
指定以 Unicode 編碼字串資料。 字元資料採用 UTF-8;圖形資料採用 UTF-16 BE。 CCSID 1208 和 1200 是 CCSID UNICODE 的同義字。 SBCS 資料庫無法指定 CCSID UNICODE (SQLSTATE 560AA)。
如果表格不是 Unicode 表格,則可以使用 CCSID UNICODE 建立直欄,但下列規則適用:
  • 在建立表格之前 (SQLSTATE 56031),必須在資料庫配置中指定替代對照順序。 CCSID UNICODE 直欄與資料庫配置中指定的替代對照順序進行對照。

    唯一支援的替代對照順序是 IDENTITY_16BIT。

  • 直欄不能是圖形資料類型。
  • 錨點資料類型無法錨點至以 CCSID UNICODE 建立的直欄 (SQLSTATE 428HS)。
  • 表格不能同時指定 CCSID UNICODE 子句及 DATA CAPTURE CHANGES 子句 (SQLSTATE 42613)。
  • 建立的暫存表格和宣告的暫存表格不能有以 CCSID UNICODE 宣告的直欄 (SQLSTATE 56031)。
  • 無法在 CREATE SCHEMA 陳述式中指定 CCSID UNICODE 直欄 (SQLSTATE 53090)。
  • 載入作業的異常狀況表格直欄必須與作業的對應目標表格直欄具有相同的 CCSID (SQLSTATE 428A5)。
  • SET INTEGRITY 陳述式的異常狀況表格直欄必須與陳述式的對應目標表格直欄具有相同的 CCSID (SQLSTATE 53090)。
  • 事件監視器資料的目標表格直欄不得宣告為 CCSID UNICODE (SQLSTATE 55049)。
[CLOB | CHARACTER LARGE OBJECT | CHAR LARGE OBJECT](integer [K | M | G] [OCTETS | CODEUNITS32])
字元大型物件字串,其長度上限為指定的編碼單位數目。 預設值為 1,048,576 (1M) 編碼單位。
如果您要將長度整數乘以 1024 (kilo)、1,048,576 (mega) 或 1,073,741,824 (giga) ,請指定 K (kilo)、 M (mega) 或 G (giga) 乘數。
  • 無論您使用哪個乘數(如果有的話),結果長度都會受到 CLOB 直欄的最大長度限制,即 2,147,483,646(適用於 OCTETS)或 536,870 ,911(適用於 CODEUNITS32)。 如果 K、M 或 G 的倍數稍微超出此長度上限(例如,2G = 2,147,483,648),則會改用長度上限。
  • 在資料類型與長度規格之間,或在長度整數與 KMG 乘數之間,容許有任何空格數 (包括零空格)。 例如,下列規格都相等且有效:
    CLOB(50K)
    CLOB(50 K)
    CLOB (50   K)
  • KMG 乘數可以大寫或小寫指定。

在 Unicode 資料庫中,字串資料類型的預設字串單位是由 NLS_STRING_UNITS 廣域變數或 string_units 資料庫配置參數的值決定。 在非 Unicode 資料庫中,字串資料類型的預設字串單位是 OCTETS。

OCTETS
指定長度屬性的單位是位元組。
CODEUNITS32
指定長度屬性的單位是 Unicode UTF-32 字碼單位,以字元為單位的近似計數。 這不會影響資料類型的基礎字碼頁。 資料值的實際長度是透過計算 UTF-32 字碼單位來決定,就像資料已轉換為 UTF-32 一樣。 CODEUNITS32 只能在 Unicode 資料庫中指定 (SQLSTATE 560AA)。
GRAPHIC(integer [CODEUNITS16 | CODEUNITS32])
指定長度的固定長度圖形字串,範圍為 1-127 個雙位元組、1-127 個 CODEUNITS16 或 1-63 個 CODEUNITS32。 預設長度為 1。
VARGRAPHIC(integer [CODEUNITS16 | CODEUNITS32])
指定長度上限的可變長度圖形字串,範圍為 1-16336 個雙位元組、1-16336 個 CODEUNITS16 或 1-8168 個 CODEUNITS32。
DBCLOB(integer [K | M | G] [CODEUNITS16 | CODEUNITS32])
指定長度上限的字元大型物件字串,以雙位元組、Unicode UTF-16 字碼單位或 Unicode UTF-32 字碼單位為單位。 預設值為 1,048,576 (1M) 編碼單位。
如果您要將長度整數乘以 1024 (kilo)、1,048,576 (mega) 或 1,073,741,824 (giga) ,請指定 K (kilo)、 M (mega) 或 G (giga) 乘數。
  • 無論您使用哪個乘數(如果有的話),產生的長度都受限於 DBCLOB 直欄的長度上限,即 1,073,741,823(若為雙位元組或 CODEUNITS16)或 536,870 ,911(若為 CODEUNITS32)。 如果 K、M 或 G 的倍數稍微超出此長度上限(例如,1G = 1,073,741,824),則會改用長度上限。
  • 在資料類型與長度規格之間,或在長度整數與 KMG 乘數之間,容許有任何空格數 (包括零空格)。 例如,下列規格都相等且有效:
    DBCLOB(50K)
    DBCLOB(50 K)
    DBCLOB (50   K)
  • KMG 乘數可以大寫或小寫指定。

在 Unicode 資料庫中,字串資料類型的預設字串單位是由 NLS_STRING_UNITS 廣域變數或 string_units 資料庫配置參數的值決定。 在非 Unicode 資料庫中,字串資料類型的預設字串單位為 CODEUNITS16。

CODEUNITS16
指定長度屬性的單位是 Unicode UTF-16 字碼單位,與以雙位元組為單位的計數相同。 CODEUNITS16 只能在 Unicode 資料庫中指定 (SQLSTATE 560AA)。
CODEUNITS32
指定長度屬性的單位是 Unicode UTF-32 字碼單位。 這不會影響資料類型的基礎字碼頁。 資料值的實際長度是透過計算 UTF-32 字碼單位來決定,就像資料已轉換為 UTF-32 一樣。 CODEUNITS32 只能在 Unicode 資料庫中指定 (SQLSTATE 560AA)。
[NATIONAL CHARACTER | NATIONAL CHAR | NCHAR](integer)
指定長度的固定長度字串。 預設長度為 1。

NATIONAL CHARACTER 類型對映至固定長度字元或固定長度圖形字串,取決於也定義字串單位的 nchar_mapping 資料庫配置參數值。

[NATIONAL CHARACTER VARYING | NATIONAL CHAR VARYING | NCHAR VARYING | NVARCHAR](integer)
指定最大長度的可變長度字串。

NATIONAL CHARACTER VARYING 類型會對映至可變長度字元或可變長度圖形字串,取決於也定義字串單位的 nchar_mapping 資料庫配置參數值。

[NATIONAL CHARACTER LARGE OBJECT | NCHAR LARGE OBJECT | NCLOB](integer [K | M | G])
指定長度上限的大型物件字串。

此資料類型對映至字元大型物件 (CLOB) 或雙位元組字元大型物件 (DBCLOB),取決於也定義字串單位的 nchar_mapping 資料庫配置參數的現行值。 如需長度整數的可能值以及如何使用 K (kilo)、 M (mega) 或 G (giga) 乘數的相關資訊,請參閱 CLOB 或 DBCLOB 參數的說明 (看何者適用)。

BINARY(整數
指定長度的固定長度二進位字串,必須在 1-255 個位元組範圍內。 預設長度為 1。
[VARBINARY | BINARY VARYING](integer)
指定最大長度的可變長度二進位字串,必須在 1-32672 個位元組範圍內。
[BLOB | BINARY LARGE OBJECT](integer [K | M | G])
指定長度上限的二進位大型物件字串。 預設值為 1,048,576 (1M) 位元組。
如果您要將長度整數乘以 1024 (kilo)、1,048,576 (mega) 或 1,073,741,824 (giga) ,請指定 K (kilo)、 M (mega) 或 G (giga) 乘數。
  • 無論您使用哪個乘數(如果有的話),產生的長度都會受到 BLOB 直欄的長度上限(即 2,147,483,647 個位元組)所限制。 如果 K、M 或 G 的倍數稍微超出此長度上限(例如,2G = 2,147,483,648),則會改用長度上限。
  • 在資料類型與長度規格之間,或在長度整數與 KMG 乘數之間,容許有任何空格數 (包括零空格)。 例如,下列規格都相等且有效:
    BLOB(50K)
    BLOB(50 K)
    BLOB (50   K)
  • KMG 乘數可以大寫或小寫指定。
日期
一個日期。
TIME
一次。
TIMESTAMP(integer) 或 TIMESTAMP
時間戳記。 整數指定從 0(秒)到 12(萬億分之一秒)的小數秒精準度。 預設值為 6(微秒)。
XML
XML 文件。 只有形式完整的 XML 文件可以插入 XML 直欄中。
XML 直欄具有下列限制:
  • 直欄不能是任何索引的一部分,但 XML 資料上的索引除外。 因此,它無法併入為主要索引鍵或唯一限制項的直欄 (SQLSTATE 42962)。
  • 直欄不能是參照限制的外部索引鍵 (SQLSTATE 42962)。
  • 無法指定直欄 (SQLSTATE 42613) 的預設值 (WITH DEFAULT)。 如果直欄可為空值,則直欄的預設值為空值。
  • 直欄無法用作配送索引鍵 (SQLSTATE 42997)。
  • 直欄無法作為資料分割鍵 (SQLSTATE 42962)。
  • 直欄無法用來組織多維度叢集 (MDC) 表格 (SQLSTATE 42962)。
  • 直欄無法在範圍叢集表格中使用 (SQLSTATE 429BG)。
  • 除了在 VALIDATED 述詞 (SQLSTATE 42621) 中之外,無法在檢查限制項中參照直欄。

建立 XML 類型的直欄時,會在該直欄上建立 XML 路徑索引。 當建立 XML 類型的第一個直欄時,也會建立表格層次 XML 區域索引。 這些索引的名稱是 SQL 後接字元時間戳記 (yymmddhhmmssxxx)。 綱目名稱是 SYSIBM。

BOOLEAN
一個布林值。
SYSPROC.DB2SECURITYLABEL
一種內建特殊類型,必須用來定義受保護表格的列安全標籤直欄。 內建特殊類型 DB2SECURITYLABEL 的直欄基礎資料類型是 VARCHAR (128) FOR BIT DATA。 表格最多可以有一個 DB2SECURITYLABEL 類型的直欄 (SQLSTATE 428C1)
distinct-type-name
適用於屬於特殊類型的使用者定義類型。 如果指定特殊類型名稱但未指定綱目名稱,則會透過在 SQL 路徑上搜尋綱目來解析特殊類型名稱(在靜態 SQL 中由 FUNCPATH 前置處理選項定義,在動態 SQL 中由 CURRENT PATH 暫存器定義)。

如果使用特殊類型來定義直欄,則直欄的資料類型是特殊類型。 直欄的長度和小數位數是特殊類型之來源類型的長度和小數位數。 指定的特殊類型不能有任何資料類型限制項,且來源類型不能是錨定資料類型 (SQLSTATE 428H2)。

如果使用特殊類型定義的直欄是參照限制項的外部索引鍵,則主要索引鍵對應直欄的資料類型必須具有相同的特殊類型。

structured-type-name
適用於屬於結構化類型的使用者定義類型。 如果指定結構化類型名稱時沒有指定綱目名稱,則會透過在 SQL 路徑上搜尋綱目來解析結構化類型名稱(由靜態 SQL 的 FUNCPATH 前置處理選項所定義,以及由動態 SQL 的 CURRENT PATH 暫存器所定義)。

如果使用結構化類型定義直欄,則直欄的靜態資料類型是結構化類型。 該直欄可以包含具有動態類型的值,該類型是 structured-type-name 的子類型。

使用結構化類型定義的直欄無法在主要索引鍵、唯一限制、外部索引鍵、索引鍵或配送索引鍵中使用 (SQLSTATE 42962)。

如果直欄是使用結構化類型來定義,且在任何巢狀層次包含 reference-type 屬性,則該 reference-type 屬性沒有範圍。 若要在解除參照作業中使用此類屬性,必須使用 CAST 規格明確指定 SCOPE。

REF (type-name2)
適用於類型化表格的參照。 如果在沒有綱目名稱的情況下指定 type-name2,則會透過搜尋 SQL 路徑上的綱目來解析類型名稱(由靜態 SQL 的 FUNCPATH 前置處理選項及動態 SQL 的 CURRENT PATH 暫存器所定義)。 直欄的基礎資料類型基於 type-name2 之 CREATE TYPE 陳述式的 REF USING 子句中指定的表示法資料類型,或包括 type-name2 之資料類型階層的根類型。
column-options
定義與表格直欄相關的其他選項。
NOT NULL
防止直欄包含空值。

如果未指定 NOT NULL,則直欄可以包含空值,且其預設值是空值或 WITH DEFAULT 子句提供的值。

NOT HIDDEN 或 IMPLICITLY HIDDEN
指定是否將直欄定義為隱藏。 HIDDEN 隱藏屬性會決定直欄是否包含在表格的隱含參照中,或是否可以在 SQL 陳述式中明確參照直欄。 預設值為 NOT HIDDEN。
NOT HIDDEN
指定直欄包含在表格的隱含參照中,且可以明確參照直欄。
IMPLICITLY HIDDEN
指定除非名稱明確參照直欄,否則在 SQL 陳述式中看不到該直欄。 例如,假設表格包含以 IMPLICITLY HIDDEN 子句定義的直欄,則 SELECT * 的結果不會包含隱含地隱藏的直欄。 不過,明確參照隱式隱藏直欄名稱的 SELECT 結果會在結果表格中包括該直欄。

不得對表格的所有直欄指定 IMPLICITLY HIDDEN (SQLSTATE 428GU)。

lob-options
指定 LOB 資料類型的選項。
LOGGED
指定將對直欄進行的變更寫入日誌。 然後,使用資料庫公用程式(例如 RESTORE DATABASE)可回復此類直欄中的資料。 LOGGED 是預設值。
NOT LOGGED
指定不記載對直欄進行的變更。 這僅適用於未列入行內的 LOB 資料。

NOT LOGGED 對確定或回復作業沒有影響;亦即,即使回復交易,也會維護資料庫的一致性,不論是否記載 LOB 值。 不記載的含意是在向前復原作業期間,在備份或載入作業之後,LOB 資料將取代為在向前復原期間重播日誌記錄的那些 LOB 值的零。 在損毀回復期間,所有已確定的變更及回復的變更都會反映預期的結果。

COMPACT
指定 LOB 直欄中的值應該佔用最小磁碟空間(釋放 LOB 值所使用最後一個群組中的任何額外磁碟頁面),而不是在 LOB 儲存區尾端留下任何剩餘空間,可能有助於後續的附加作業。 以這種方式儲存資料可能會降低直欄上附加(加長)作業的效能。
NOT COMPACT
指定插入項目的部分空間,以協助未來變更直欄中的 LOB 值。 這是預設值。
SCOPE
識別參照類型直欄的範圍。

必須為預期用作解除參照運算子的左運算元或 DEREF 函數的引數的任何直欄指定範圍。 指定參照類型直欄的範圍可以延遲至後續的 ALTER TABLE 陳述式,以容許定義目標表格(通常在相互參照表格時)。

typed-table-name
類型化表格的名稱。 表格必須已存在,或與正在建立的表格名稱相同 (SQLSTATE 42704)。 column-name 的資料類型必須是 REF (S),其中 S 的類型是 typed-table-name (SQLSTATE 428DM)。 不會對指派給 column-name 的值執行任何檢查,以確保這些值實際參照 typed-table-name 中的現有列。
typed-view-name
類型化視圖的名稱。 視圖必須已存在,或與所建立視圖的名稱相同 (SQLSTATE 42704)。 column-name 的資料類型必須是 REF (S),其中 S 的類型是 typed-view-name (SQLSTATE 428DM)。 不會對指派給 column-name 的值執行任何檢查,以確保這些值實際參照 typed-view-name 中的現有列。
CONSTRAINT constraint-name
將限制命名。 constraint-name 不得識別已在相同 CREATE TABLE 陳述式內指定的限制項。 (SQLSTATE 42710)。

如果省略此子句,則系統會產生在表格上定義的現有限制項 ID 中唯一的 18 個位元組長度 ID。 (ID 包含 SQL,後面接著時間戳記型函數所產生的 15 個數值字元序列)。

與 PRIMARY KEY 或 UNIQUE 限制一起使用時,可以使用 constraint-name 作為建立以支援限制項的索引名稱。

PRIMARY KEY
這提供一種速記方法來定義由單一直欄組成的主要索引鍵。 因此,如果在直欄 C 的定義中指定 PRIMARY KEY,則效果與將 PRIMARY KEY (C) 子句指定為個別子句相同。

如果表格是子表格 (SQLSTATE 429B3) ,則無法指定主要索引鍵,因為主要索引鍵繼承自超表格。

無法使用 ROW CHANGE TIMESTAMP 直欄作為主要索引鍵的一部分 (SQLSTATE 429BV)。

Row-begin、row-end 及 transaction-start-ID 直欄無法作為主要索引鍵的一部分 (SQLSTATE 429BV)。

請參閱 unique-constraint 說明內的 PRIMARY KEY。

唯一
這提供一種速記方法來定義由單一直欄組成的唯一索引鍵。 因此,如果在直欄 C 的定義中指定 UNIQUE,則效果與將 UNIQUE (C) 子句指定為個別子句相同。

如果表格是子表格 (SQLSTATE 429B3),則無法指定唯一限制項,因為唯一限制項繼承自超表格。

請參閱 unique-constraint 說明內的 UNIQUE。

references-clause
這提供一種速記方法來定義由單一直欄所組成的外部索引鍵。 因此,如果在直欄 C 的定義中指定了 references-clause,效果就如同將 references-clause 指定為 FOREIGN KEY 子句的一部分一樣,其中 C 是唯一識別的直欄。

請參閱 referential-constraint 說明下的 references-clause

CHECK (check-condition)
這提供一種速記方法來定義套用至單一直欄的核對限制項。 請參閱 CHECK (檢查條件) 的說明。
default-clause
指定直欄的預設值。
WITH
選用關鍵字。
預設

如果在插入時未提供值,或在 INSERT 或 UPDATE 上指定為 DEFAULT,則提供預設值。 如果未在 DEFAULT 關鍵字後面指定預設值,則預設值取決於直欄的資料類型,如 ALTER TABLE 所示。 此子句不能與直欄定義中的 generated-clause 一起指定 (SQLSTATE 42614)。

如果直欄定義為 XML,則無法指定預設值 (SQLSTATE 42613)。 唯一可能的預設值是 NULL。

如果直欄是根據類型化表格的直欄,則在定義預設值時必須指定特定的預設值。 無法為類型化表格的物件 ID 直欄指定預設值 (SQLSTATE 42997)。

如果使用特殊類型來定義直欄,則直欄的預設值是來源資料類型強制轉型為特殊類型的預設值。

如果使用結構化類型定義直欄,則無法指定 default-clause (SQLSTATE 42842)。

column-definition 中省略 DEFAULT 會導致使用空值作為直欄的預設值。 如果此類直欄定義為 NOT NULL,則該直欄沒有有效的預設值。

default-values
可以指定的特定預設值類型如下。
常數
指定常數作為直欄的預設值。 指定的常數必須:
  • 代表根據指派規則可以指派給直欄的值。
  • 除非直欄以浮點資料類型定義,否則不是浮點常數。
  • 如果直欄的資料類型是十進位浮點,則為數值常數或十進位浮點特殊值。 如果目標直欄是 DECFLOAT,則浮點常數會先解譯成 DOUBLE,然後轉換成十進位浮點。 對於 DECFLOAT (16) 直欄,精準度大於 16 位數的十進位常數會使用 CURRENT DECFLOAT ROUNDING MODE 特別暫存器指定的捨入模式進行捨入。
  • 如果常數是十進位常數(例如,1.234 不能是 DECIMAL (5, 2) 直欄的預設值),則在直欄資料類型的小數位數之外沒有非零數字。
  • 以不超過 254 個位元組表示,包括引號字元、十六進位常數的任何引數字元(例如 X),以及完整函數名稱和括弧中的字元(當常數是 cast-function 的引數時)
datetime-special-register
指定 INSERT、UPDATE 或 LOAD 時的日期時間特別暫存器(CURRENT DATE、CURRENT TIME 或 CURRENT TIMESTAMP)值作為直欄的預設值。 直欄的資料類型必須是對應於所指定特別暫存器的資料類型(例如,當指定 CURRENT DATE 時,資料類型必須是 DATE)。
user-special-register
將 INSERT、UPDATE 或 LOAD 時的使用者特別暫存區(CURRENT USER、SESSION_USER、SYSTEM_USER)值指定為直欄的預設值。 直欄的資料類型必須是長度不小於使用者特別暫存器長度屬性的字串。 可以指定 USER 來取代 SESSION_USER,也可以指定 CURRENT_USER 來取代 CURRENT USER。
現行綱目
指定 INSERT、UPDATE 或 LOAD 時 CURRENT SCHEMA 特別暫存器的值作為直欄的預設值。 如果指定 CURRENT SCHEMA,則直欄的資料類型必須是長度大於或等於 CURRENT SCHEMA 特別暫存器的長度屬性的字串。
CURRENT MEMBER
指定 INSERT、UPDATE 或 LOAD 時 CURRENT MEMBER 特別暫存器的值作為直欄的預設值。 如果指定 CURRENT MEMBER,則直欄的資料類型必須容許從整數指派。
空值
指定 NULL 作為直欄的預設值。 如果指定 NOT NULL,則可以在相同的直欄定義內指定 DEFAULT NULL,但是任何將直欄設為預設值的嘗試都會導致錯誤。
cast-function
此預設值形式只能與定義為特殊類型、BLOB 或日期時間(DATE、TIME 或 TIMESTAMP)資料類型的直欄搭配使用。 對於特殊類型,除了基於 BLOB 或日期時間類型的特殊類型之外,函數名稱必須符合直欄的特殊類型名稱。 如果以綱目名稱來限定,它必須與特殊類型的綱目名稱相同。 如果不完整,則函數解析中的綱目名稱必須與特殊類型的綱目名稱相同。 對於以日期時間類型為基礎的特殊類型(其中預設值是常數),必須使用函數,且函數名稱必須符合特殊類型的來源類型名稱,其中具有 SYSIBM 的隱含或明確綱目名稱。 對於其他日期時間直欄,也可以使用對應的日期時間函數。 對於 BLOB 或基於 BLOB 的特殊類型,必須使用函數,且函數名稱必須是具有 SYSIBM 隱含或明確綱目名稱的 BLOB。
常數
指定常數作為引數。 常數必須符合特殊類型的來源類型或資料類型(如果不是特殊類型)的常數規則。 如果 cast-function 是 BLOB,則常數必須是字串常數。
datetime-special-register
指定 CURRENT DATE、CURRENT TIME 或 CURRENT TIMESTAMP。 直欄特殊類型的來源類型必須是對應於指定特別暫存器的資料類型。
user-special-register
指定 CURRENT USER、SESSION_USER 或 SYSTEM_USER。 直欄特殊類型之來源類型的資料類型必須是長度至少為 8 個位元組的字串資料類型。 如果 cast-function 是 BLOB,則長度屬性必須至少為 8 個位元組。
現行綱目
指定 CURRENT SCHEMA 特別暫存器的值。 直欄特殊類型之來源類型的資料類型必須是長度大於或等於 CURRENT SCHEMA 特別暫存器之長度屬性的字串。 如果 cast-function 是 BLOB,則長度屬性必須至少為 8 個位元組。
EMPTY_CLOB()、EMPTY_DBCLOB() 或 EMPTY_BLOB()
指定零長度字串作為直欄的預設值。 直欄必須具有對應於函數結果資料類型的資料類型。

如果指定的值無效,則會傳回錯誤 (SQLSTATE 42894)。

generated-clause
指定直欄產生的值。
已產生

指定資料庫產生直欄的值。 如果要將直欄視為身分直欄或列變更時間戳記直欄、row-begin 直欄、row-end 直欄、transaction-start-ID 直欄或產生的表示式直欄,則必須指定 GENERATED。 不得對定義為 GENERATED 的直欄指定預設子句 (SQLSTATE 42623)。

ALWAYS
指定在表格中插入列時,或每當 generation-expression 的結果值變更時,一律為直欄產生值。 表示式的結果會儲存在表格中。 除非正在執行資料傳送或卸載及重新載入作業,否則建議值是 GENERATED ALWAYS。 GENERATED ALWAYS 是所產生直欄的必要值。
BY DEFAULT
指定在插入列時,資料庫會產生直欄的值,或指定 DEFAULT 子句來更新,除非指定明確值。 使用資料傳播或執行卸載及重新載入作業時,BY DEFAULT 是建議值。

雖然未明確要求,但是為了確保值的唯一性,請在產生的 IDENTITY 直欄上定義唯一 single-column 索引。

AS IDENTITY
指定直欄要成為此表格的身分直欄。 表格只能有單一身分直欄 (SQLSTATE 428C1)。 只有在與直欄相關聯的資料類型是小數位數為零的確切數值類型,或來源類型是小數位數為零的確切數值類型的使用者定義特殊類型時,才能指定 IDENTITY 關鍵字 (SQLSTATE 42815)。 小數位數為零的 SMALLINT、INTEGER、BIGINT 或 DECIMAL,或基於其中一種類型的特殊類型,會被視為確切的數值類型。 相反地,單精準度和雙精準度浮點會被視為近似數值資料類型。 參照類型(即使以確切數值類型表示)無法定義為身分直欄。

身分直欄隱含地為 NOT NULL。 身分直欄不能有 DEFAULT 子句 (SQLSTATE 42623)。

START WITH numeric-constant
指定身分直欄的第一個值。 此值可以是指派給此直欄的任何正或負值 (SQLSTATE 42815),小數點右側沒有非零數字 (SQLSTATE 428FA)。 若為遞增順序,預設值為 MINVALUE,若為遞減順序,則為 MAXVALUE。 此值不一定是在達到身分直欄的最大值或最小值之後循環的值。 START WITH 子句可用來開始產生在用於循環的範圍之外的值。 用於循環的範圍是由 MINVALUE 和 MAXVALUE 定義。
INCREMENT BY numeric-constant
指定身分直欄連續值之間的間隔。 此值可以是可能指派給此直欄的任何正數值或負數值 (SQLSTATE 42815),且不超過大整數常數的值 (SQLSTATE 42820),小數點右側沒有非零數字 (SQLSTATE 428FA)。

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

NO MINVALUE MINVALUE
指定在達到最大值之後,遞減身分直欄循環或停止產生值,或遞增身分直欄循環至的最小值。
NO MINVALUE
若為遞增順序,該值為 START WITH 值,若未指定 START WITH,則為 1。 若為遞減順序,該值是直欄資料類型的最小值。 這是預設值。
MINVALUE numeric-constant
指定為最小值的數值常數。 此值可以是指派給此直欄的任何正數值或負數值 (SQLSTATE 42815) ,小數點右側沒有非零數字 (SQLSTATE 428FA),但此值必須小於或等於最大值 (SQLSTATE 42815)。
無 MAXVALUE MAXVALUE
指定在達到最小值之後,遞增身分直欄循環或停止產生值,或遞減身分直欄循環至的最大值。
NO MAXVALUE
若為遞增順序,該值是直欄資料類型的最大值。 若為遞減順序,該值為 START WITH 值,若未指定 START WITH,則為 -1。 這是預設值。
MAXVALUE numeric-constant
指定數值常數,其為最大值。 此值可以是任何指派給此直欄的正數值或負數值 (SQLSTATE 42815) ,小數點右側沒有非零數字 (SQLSTATE 428FA),但此值必須大於或等於最小值 (SQLSTATE 42815)。
NO CYCLE CYCLE
指定此身分直欄在產生其最大值或最小值之後是否應繼續產生值。
NO CYCLE
指定在達到最大值或最小值之後,不產生身分直欄的值。 這是預設值。
CYCLE
指定在達到最大值或最小值之後,繼續為此直欄產生值。 如果使用此選項,則在遞增身分直欄達到最大值之後,它會產生其最小值;或在遞減順序達到最小值之後,它會產生其最大值。 身分直欄的最大值和最小值決定用於循環的範圍。

當 CYCLE 生效時,可能會為身分直欄產生重複值。 雖然未明確要求,但是如果需要唯一值,則應該在產生的直欄上定義唯一單一直欄索引,以確保值的唯一性。 如果此類身分直欄上存在唯一索引,且產生非唯一值,則會發生錯誤 (SQLSTATE 23505)。

NO CACHE CACHE
指定是否將部分預先配置值保留在記憶體中,以加快存取速度。 如果身分直欄需要新值,且快取中沒有可用的值,則必須記載新快取區塊的結尾。 然而,如果身分直欄需要新值,且快取中存在未用的值,則該身分值的配置會更快,因為不需要記載。 這是效能及調整選項。
NO CACHE
指定不預先配置身分直欄的值。

指定此選項時,身分直欄的值不會儲存在快取中。 在此情況下,每個新身分值的要求都會導致日誌中出現同步 I/O。

CACHE integer-constant
指定要預先配置並保留在記憶體中的識別順序值數目。 當為身分直欄產生值時,預先配置及儲存在快取中的值會減少日誌的同步 I/O。

如果身分直欄需要新值,且快取中沒有未用的值可用,則值的配置包括等待日誌的 I/O。 然而,當身分直欄需要新值,且快取中存在未用的值時,透過避免對日誌進行 I/O,可以更快速地配置該身分值。

最小值為 2 (SQLSTATE 42815)。 預設值為 CACHE 20。

使用 CACHE 和 NO ORDER 選項可同時容許多個身分值快取。 在多重分割區或 Db2® pureScale® 環境中, 多個成員可以快取它們。

Db2 pureScale 環境中,如果同時指定 CACHE 及 ORDER ,則 ORDER 規格會置換 CACHE 的規格,而「無 CACHE」會生效。

NO ORDER ORDER
指定是否必須依要求順序產生身分值。
NO ORDER
指定不需要依要求順序產生值。 這是預設值。
ORDER
指定必須依要求順序產生值。
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
指定直欄是表格的時間戳記直欄。 針對所插入的每一列中的直欄,以及任何已更新直欄的任何列產生值。 為 ROW CHANGE TIMESTAMP 直欄產生的值是對應於該列插入或更新時間的時間戳記。 如果使用單一陳述式插入或更新多列,則每一列的 ROW CHANGE TIMESTAMP 直欄值可能不同。

表格只能有一個 ROW CHANGE TIMESTAMP 直欄 (SQLSTATE 428C1)。 如果指定 data-type,則必須是 TIMESTAMP 或 TIMESTAMP (6) (SQLSTATE 42842)。 ROW CHANGE TIMESTAMP 直欄不能有 DEFAULT 子句 (SQLSTATE 42623)。 必須對 ROW CHANGE TIMESTAMP 直欄指定 NOT NULL (SQLSTATE 42831)。

AS (generation-expression)
指定直欄的定義以表示式為基礎。 (如果 GENERATED ALWAYS 直欄的表示式包括使用者定義的外部函數,則變更函數的執行檔(例如給定引數的結果變更)可能會導致資料不一致。 您可以使用 SET INTEGRITY 陳述式來強制產生新值,以避免此情況。) generation-expression 不能包含下列任何一項 (SQLSTATE 42621):
  • 查詢細項
  • XMLQUERY 或 XMLEXISTS 表示式
  • 直欄函數
  • 取消參照作業或 DEREF 函數
  • 非決定性的使用者定義或內建函數
  • 使用 EXTERNAL ACTION 選項的使用者定義函數
  • 未使用 NO SQL 定義的使用者定義函數
  • 主機變數或參數標記
  • 特別暫存器及內建函數,視特別暫存器的值而定
  • 廣域變數
  • 直欄清單中稍後定義的直欄參照
  • 其他產生直欄的參照
  • XML 類型直欄的參照

直欄的資料類型基於 generation-expression 的結果資料類型。 CAST 規格可用來強制特定資料類型及提供範圍(僅適用於參照類型)。 如果指定 資料類型,則會根據適當的指派規則將值指派給直欄。 除非指定 NOT NULL 直欄選項,否則會將產生的直欄視為可為空值。 所產生直欄的資料類型及 generation-expression 的結果資料類型必須已定義相等(請參閱指派和比較)。 這會根據任何這些類型,排除 LOB 資料類型、XML、結構化類型及特殊類型的直欄及產生表示式 (SQLSTATE 42962)。

AS ROW BEGIN

指定每當將列插入表格或更新列中的任何直欄時,由資料庫管理程式指派產生的值。 在交易中執行第一個資料變更陳述式期間,如果需要將值指派給表格中的 row-begin 直欄或 transaction-start-ID 直欄,或刪除系統期間時間表格中的列,則會使自當日時間時鐘的讀數來產生值。

對於系統期間時間表格,資料庫管理程式可確保交易之間 row-begin 直欄所產生值的唯一性。 可以調整時間戳記值,以確保插入相關聯歷程表的列具有大於開始時間戳記值的結束時間戳記值。 當衝突交易正在更新系統期間時間表格中的相同列時,可能會發生這種情況。 資料庫配置參數 systime_period_adj 必須設為,才能進行此時間戳記值的調整。 如果在單一 SQL 交易內插入或更新多個列,且不需要調整,則所有列的 row-begin 直欄值都相同,但與針對另一個交易的直欄所產生的值是都不同。 需要 row-begin 直欄作為 SYSTEM_TIME 期間的開始直欄,這是此類型所產生直欄的預期用途。

表格只能有一個 row-begin 直欄 (SQLSTATE 428C1)。 如果未指定 data-type,則直欄定義為 TIMESTAMP (12)。 如果指定 data-type,則必須是 TIMESTAMP (12) (SQLSTATE 42842)。 直欄不能有 DEFAULT 子句 (SQLSTATE 42623),且必須定義為 NOT NULL (SQLSTATE 42831)。 無法更新 row-begin 直欄。

AS ROW END

指定每當插入列或更新列中的任何直欄時,資料庫管理程式都會指派直欄資料類型的值。 指派值為 TIMESTAMP 9999-12-30-00.00.00.000000000000

需要 row-end 直欄作為 SYSTEM_TIME 期間的第二個直欄,這是此類型所產生直欄的預期用途。

表格只能有一個 row-end 直欄 (SQLSTATE 428C1)。 如果未指定 data-type,則直欄定義為 TIMESTAMP (12)。 如果指定 data-type,則必須是 TIMESTAMP (12) (SQLSTATE 42842)。 直欄不能有 DEFAULT 子句 (SQLSTATE 42623),且必須定義為 NOT NULL (SQLSTATE 42831)。 無法更新列結尾直欄。

AS TRANSACTION START ID

指定每當將列插入表格或更新列中的任何直欄時,資料庫管理程式就會指派該值。 資料庫管理程式會指派每筆交易的唯一時間戳記值或空值。 如果直欄可為空值,且表格中有列開頭直欄不需要調整值,則會將空值指派給 transaction-start-ID 直欄。 否則,會在交易中執行第一個資料變更陳述式期間,使用當日時間時鐘的讀數來產生值,該交易需要將值指派給表格中的 row-begin 直欄或 transaction-start-ID 直欄,或刪除系統期間時間表格中的列。 如果在單一 SQL 交易內插入或更新多列,則 transaction-start-ID 直欄的值對於所有列都是相同的,且與針對另一個交易的直欄所產生的值是唯一的。

系統期間時間表格需要 transaction-start-ID 直欄,這是此類型所產生直欄的預期用途。

表格只能有一個 transaction-start-ID 直欄 (SQLSTATE 428C1)。 如果未指定 data-type,則直欄定義為 TIMESTAMP (12)。 如果指定 data-type,則它必須是 TIMESTAMP (12)。 transaction-start-ID 直欄不能有 DEFAULT 子句 (SQLSTATE 42623)。 無法更新 transaction-start-ID 直欄。

INLINE LENGTH 整數
此選項僅適用於使用結構化類型、XML 或 LOB 資料類型定義的直欄 (SQLSTATE 42842)。

對於資料類型 XML 或 LOB 的直欄,整數指出要儲存在基本表格列中的 XML 文件或 LOB 資料之內部表示法的位元組大小上限。 內部呈現較大的 XML 文件會與輔助儲存體物件中的基本表格列分開儲存。 這會自動發生。 XML 類型直欄沒有預設行內長度。 如果 XML 文件或 LOB 資料儲存在基本表格列行內,則會有額外的額外負擔。 對於 LOB 資料,額外負擔是 4 個位元組。

對於資料類型 LOB 的直欄,如果未指定子句,則預設行內長度會設為 LOB 描述子的大小上限。 所有明確的 INLINE LENGTH 必須至少為 LOB 描述子大小上限。 下表彙總 LOB 描述子大小。
表 1. 各種 LOB 長度的 LOB 描述子大小。
LOB 長度上限(以位元組為單位) 明確行內長度下限
1,024 68
8,192 92
65,536 116
524,000 140
4,190,000 164
134,000,000 196
536,000,000 220
1,070,000,000 252
1,470,000,000 276
2,147,483,647 312
對於結構化類型直欄,整數指出要與列中其餘值一起行內儲存的結構化類型實例大小上限(以位元組為單位)。 無法行內儲存的結構化類型實例與基本表格列分開儲存,類似於 LOB 值的儲存方式。 這會自動發生。 結構化類型直欄的預設 INLINE LENGTH 是其類型的行內長度(在 CREATE TYPE 陳述式中明確或依預設指定)。 如果結構化類型的 INLINE LENGTH 小於 292,則直欄的 INLINE LENGTH 會使用值 292。
附註: 子類型的行內長度不會計入預設行內長度,這表示子類型的實例可能不適合行內,除非在 CREATE TABLE 時間指定明確 INLINE LENGTH ,以說明現有及未來的子類型。

明確 INLINE LENGTH 值不能超過 32 673。 對於結構化類型或 XML 資料類型,它必須至少為 292 (SQLSTATE 54010)。

COMPRESS SYSTEM DEFAULT
指定使用最小空間來儲存系統預設值。 如果未指定 VALUE COMPRESSION 子句,則會傳回警告 (SQLSTATE 01648),且系統預設值不會使用最小空間來儲存。

容許以這種方式儲存系統預設值會在直欄的插入及更新作業期間造成些微效能損失,因為已執行額外檢查。

基本資料類型不得為 DATE、TIME、TIMESTAMP、XML 或結構化資料類型 (SQLSTATE 42842)。 如果基本資料類型是可變長度字串,則會忽略此子句。 如果已使用 VALUE COMPRESSION 設定表格,則會自動壓縮長度為 0 的字串值。

COLUMN SECURED WITH security-label-name
識別與表格相關聯的安全原則存在的安全標籤。 名稱不得完整 (SQLSTATE 42601)。 表格必須具有相關聯的安全原則 (SQLSTATE 55064)。 表格不得是系統期間時間表格。

通常不容許您以現行 LBAC 認證不容許您寫入該資料的方式來保護資料。 若要保護具有特定安全標籤的直欄,您必須具有 LBAC 認證,可讓您寫入受該安全標籤保護的資料。 您不需要具有 SECADM 權限。

period-definition
期間
定義表格的期間。
SYSTEM_TIME (begin-column-name, end-column-name)

定義名稱為 SYSTEM_TIME 的系統期間。 表格中不得有名稱為 SYSTEM_TIME 的直欄 (SQLSTATE 42711)。 表格只能有一個 SYSTEM_TIME 期間 (SQLSTATE 42711)。 begin-column-name 必須定義為 ROW BEGIN,end-column-name 必須定義為 ROW END (SQLSTATE 428HN)。

BUSINESS_TIME (begin-column-name, end-column-name)

定義名稱為 BUSINESS_TIME 的應用程式期間。 表格中不得有名稱為 BUSINESS_TIME 的直欄 (SQLSTATE 42711)。 表格只能有一個 BUSINESS_TIME 期間 (SQLSTATE 42711)。 begin-column-nameend-column-name 必須同時定義為 DATE 或 TIMESTAMP (P),其中 P 是在 0-12 範圍內 (SQLSTATE 42842),且直欄必須定義為 NOT NULL (SQLSTATE 42831)。 begin-column-nameend-column-name 不得識別以 GENERATED 子句定義的直欄 (SQLSTATE 428HZ)。

即會產生隱含的檢查限制項,以確保 end-column-name 的值大於 begin-column-name 的值。 隱含建立的檢查限制項的名稱是 DB2_GENERATED_CHECK_CONSTRAINT_FOR_BUSINESS_TIME,且不得是陳述式中指定的任何其他檢查限制項的名稱 (SQLSTATE 42710)。

unique-constraint
定義唯一或主要索引鍵限制。 如果表格具有配送索引鍵,則任何唯一或主要索引鍵都必須是配送索引鍵的超集。 無法對作為子表格的表格指定唯一或主要索引鍵限制 (SQLSTATE 429B3)。 主要或唯一索引鍵不能是維度的子集 (SQLSTATE 429BE)。 如果表格是根表格,則限制會套用至表格及其所有子表格。
CONSTRAINT constraint-name
命名主要索引鍵或唯一限制項。
UNIQUE (column-name, ...)
定義由已識別直欄組成的唯一索引鍵。 識別的直欄必須定義為 NOT NULL。 每一個 column-name 都必須識別表格的直欄,且不能多次識別相同的直欄。
如果表格已定義 BUSINESS_TIME 期間,則 BUSINESS_TIME WITHOUT OVERLAPS 可以指定為索引鍵表示式清單中的最後一個項目。 如果指定 BUSINESS_TIME WITHOUT OVERLAPS,則清單必須至少包含一個 column-name。 WITHOUT OVERLAPS 表示對於其他指定的索引鍵,值相對於 BUSINESS_TIME 期間的時間而言是唯一的。 當指定 BUSINESS_TIME WITHOUT OVERLAPS 時, BUSINESS_TIME 期間的直欄不得指定為限制項的一部分 (SQLSTATE 428HW)。 BUSINESS_TIME WITHOUT OVERLAPS 的規格會將下列屬性新增至限制項:
  • BUSINESS_TIME 期間的結束直欄(遞增順序)
  • BUSINESS_TIME 期間的開始直欄(遞增順序)

識別的直欄數不得超過 64,且其儲存長度的總和不得超過 頁面大小的索引鍵長度限制。 如需直欄儲存長度,請參閱位元組計數。 如需金鑰長度限制,請參閱 SQL 限制。 無法使用基於其中一種類型的 LOB、XML、特殊類型或結構化類型作為唯一索引鍵的一部分,即使直欄的長度屬性足夠小,足以符合分頁大小的索引鍵長度限制 (SQLSTATE 54008)。

唯一索引鍵中的直欄集不能與主要索引鍵或另一個唯一索引鍵中的直欄集相同 (SQLSTATE 01543)。 (如果 LANGLEVEL 是 SQL92E 或 MIA,則會傳回錯誤,SQLSTATE 42891)。

如果表格是子表格 (SQLSTATE 429B3),則無法指定唯一限制項,因為唯一限制項繼承自超表格。

型錄中所記錄的表格說明包括唯一索引鍵,以及 (如果施行) 其唯一索引。 如果施行,則會以每一個直欄的遞增順序指定順序,自動為直欄建立唯一雙向索引(容許正向及反向掃描)。 如果與建立表格所在綱目中的現有索引不衝突,則索引的名稱與 constraint-name 相同。 如果索引名稱衝突,則名稱是 SQL,後面接著字元時間戳記 (yymmddhhmmssxxx),並以 SYSIBM 作為綱目名稱。

PRIMARY KEY (column-name,...)
定義由已識別直欄組成的主要索引鍵。 子句不得指定多次,且識別的直欄必須定義為 NOT NULL。 每一個 column-name 都必須識別表格的直欄,且不能多次識別相同的直欄。
如果表格已定義 BUSINESS_TIME 期間,則 BUSINESS_TIME WITHOUT OVERLAPS 可以指定為索引鍵表示式清單中的最後一個項目。 如果指定 BUSINESS_TIME WITHOUT OVERLAPS,則清單必須至少包含一個 column-name。 WITHOUT OVERLAPS 表示對於其餘指定的索引鍵,值相對於 BUSINESS_TIME 期間的時間而言是唯一的。 當指定 BUSINESS_TIME WITHOUT OVERLAPS 時, BUSINESS_TIME 期間的直欄不得指定為限制項的一部分 (SQLSTATE 428HW)。 BUSINESS_TIME WITHOUT OVERLAPS 的規格會將下列屬性新增至限制項:
  • BUSINESS_TIME 期間的結束直欄(遞增順序)
  • BUSINESS_TIME 期間的開始直欄(遞增順序)

識別的直欄數不得超過 64,且其儲存長度的總和不得超過 頁面大小的索引鍵長度限制。 如需直欄儲存長度,請參閱位元組計數。 如需金鑰長度限制,請參閱 SQL 限制 無法使用基於其中一種類型的 LOB、XML、特殊類型或結構化類型作為主要索引鍵的一部分,即使直欄的長度屬性足夠小,可符合分頁大小的索引鍵長度限制 (SQLSTATE 54008)。

主要索引鍵中的直欄集不能與唯一索引鍵中的直欄集相同 (SQLSTATE 01543)。 (如果 LANGLEVEL 是 SQL92E 或 MIA,則會傳回錯誤,SQLSTATE 42891)。

在表格上只能定義一個主要索引鍵。

如果表格是子表格 (SQLSTATE 429B3) ,則無法指定主要索引鍵,因為主要索引鍵繼承自超表格。

型錄中記錄的表格說明包括主要索引鍵,以及(如果施行)其主要索引。 如果施行,則會以每一個直欄的遞增順序來指定順序,自動為直欄建立唯一雙向索引(容許正向及反向掃描)。 如果與建立表格所在綱目中的現有索引不衝突,則索引的名稱與 constraint-name 相同。 如果索引名稱衝突,則名稱是 SQL,後面接著字元時間戳記 (yymmddhhmmssxxx),並以 SYSIBM 作為綱目名稱。

使用 DISTRIBUTE BY HASH 子句明確定義配送索引鍵時,unique-constraint 的直欄必須是配送索引鍵直欄的超集;直欄順序不重要。 隱含定義配送索引鍵時,會根據唯一限制項的定義來選取它們。 在下列情況下,會隱含選取配送索引鍵:
  • 省略 DISTRIBUTE BY HASH 子句,並在具有多個分割區的資料庫分割區群組中定義表格。
  • 使用 DISTRIBUTE BY RANDOM 子句。
referential-constraint
定義參照限制。
CONSTRAINT constraint-name
命名參照限制。
FOREIGN KEY (column-name,...)
以指定的 constraint-name 定義參照限制。

讓 T1 表示陳述式的物件表格。 參照限制的外部索引鍵是由識別的直欄組成。 直欄名稱清單中的每一個名稱都必須識別 T1 的直欄,且不能多次識別相同的直欄。

識別的直欄數不得超過 64,且其儲存長度的總和不得超過 頁面大小的索引鍵長度限制。 如需直欄儲存長度,請參閱位元組計數。 如需金鑰長度限制,請參閱 SQL 限制 沒有 LOB、XML、基於這些類型之一的特殊類型,或結構化類型直欄可以用作外部索引鍵的一部分 (SQLSTATE 42962)。 外部索引鍵直欄的數目必須與母項索引鍵中的數目相同,且對應直欄的資料類型必須相容 (SQLSTATE 42830)。 如果兩個直欄具有相容的資料類型(兩個直欄都是數值、字串、圖形、日期/時間,或具有相同的特殊類型),則兩個直欄說明是相容的。

references-clause
指定參照限制項的母項表格或母項暱稱及母項索引鍵。
REFERENCES table-name 暱稱
REFERENCES 子句中指定的表格或暱稱必須識別型錄中說明的基本表格或暱稱,但不得識別型錄表格。

如果參照限制的外部索引鍵、母項索引鍵及母項表格或母項暱稱與先前指定的參照限制項的外部索引鍵、母項索引鍵及母項表格或母項暱稱相同,則參照限制項是重複的。 系統會忽略重複的參照限制,並傳回警告 (SQLSTATE 01543)。

在下列討論中,讓 T2 表示已識別的母項表格,讓 T1 表示正在建立 (或已變更) 的表格。 (T1 和 T2 可以是相同的表格)。

指定的外部索引鍵必須具有與 T2 的母項索引鍵相同的直欄數,且外部索引鍵的第 n 個直欄的說明必須與該母項索引鍵的第 n 個直欄的說明可比較。 基於此規則的目的,日期時間直欄不會被視為與字串直欄可比較。
(column-name,...)
參照限制項的母項索引鍵是由識別的直欄組成。 每一個 column-name 都必須是識別 T2直欄的不完整名稱。 不能多次識別相同的直欄。

直欄名稱清單必須符合 T2 上存在的主要索引鍵或唯一限制項的直欄集(任意順序)(SQLSTATE 42890)。 如果未指定直欄名稱清單,則 T2 必須具有主要索引鍵 (SQLSTATE 42888)。 省略直欄名稱清單是原始指定順序中該主要索引鍵之直欄的隱含規格。

FOREIGN KEY 子句指定的參照限制項定義了一個關係,其中 T2 是母項,T1 是相依項。

rule-clause
指定要對相依表格採取的動作。
ON DELETE
指定刪除母項表格的列時要對相依表格執行的動作。 有四個可能的動作:
  • NO ACTION(預設值)
  • RESTRICT
  • CASCADE
  • SET NULL
當 T2 的列是 DELETE 或延伸刪除作業的物件,且該列在 T1 中具有相依項時,會套用刪除規則。 讓 P 表示 T2 的一個此類列。
  • 如果指定 RESTRICT 或 NO ACTION,則會發生錯誤,且不會刪除任何列。
  • 如果指定 CASCADE,則會將刪除作業延伸到 T1 中 p 的相依項。
  • 如果指定 SET NULL,T1 中每一個 p 相依項的外部索引鍵的每一個可為空值直欄都會設為空值。

除非外部索引鍵的部分直欄容許空值,否則不得指定 SET NULL。 子句的省略是 ON DELETE NO ACTION 的隱含規格。

如果 T1 透過多個路徑對 T2 執行 delete-connected,則不容許定義兩個具有重疊外部索引鍵定義的 SET NULL 規則。 例如:T1(i1、i2、i3)。 不容許具有外部索引鍵(i1、i2)的 Rule1 及具有外部索引鍵(i2、i3)的 Rule2 。

規則的發動順序為:
  1. RESTRICT
  2. SET NULL OR CASCADE
  3. 不需任何動作

如果 T1 中的所有列都受到兩個不同規則的影響,則會發生錯誤,且不會刪除任何列。

如果參照限制會導致表格在包含兩個以上表格的循環中與其本身刪除連接,且其中一個刪除規則是 RESTRICT 或 SET NULL (SQLSTATE 42915) ,則無法定義參照限制。

除了下列情況 (SQLSTATE 42915) 之外,還可以定義參照限制,以透過多個路徑讓表格對其本身或另一個表格執行 delete-connected:

  • 表格不能同時是 CASCADE 關係中的相依表格(自我參照或參照另一個表格),且具有刪除規則為 RESTRICT 或 SET NULL 的自我參照關係。
  • 當一個索引鍵中至少有一個直欄與另一個索引鍵中的直欄相同時,索引鍵會與另一個索引鍵重疊。 當表格透過具有重疊外部索引鍵的多個關係對另一個表格執行 delete-connected 時,那些關係必須具有相同的刪除規則,且沒有任何刪除規則可以是 SET NULL。
  • 當表格透過多個關係對另一個表格執行 delete-connected,且其中至少一個關係指定了 SET NULL 刪除規則時,這些關係的外部索引鍵定義不得包含任何配送索引鍵或多維度叢集 (MDC) 索引鍵直欄。
  • 當兩個表格透過 CASCADE 關係對相同表格執行 delete-connected 時,如果每一個 delete-connected 路徑中最後一個關係的刪除規則是 RESTRICT 或 SET NULL,則這兩個表格不能彼此執行 delete-connected。

如果 T1 中的任何列受到不同刪除規則的影響,則結果會影響這些規則指定的所有動作。 T1 上的 AFTER 觸發程式及 CHECK 限制項也會看到所有動作的效果。 例如,透過上代表格的一個 delete-connected 路徑,將目標設為空值,並透過相同上代表格的第二個 delete-connected 路徑,將目標設為刪除。 結果會是刪除列。 將會啟動此後代表格上的 AFTER DELETE 觸發程式,但不會啟動 AFTER UPDATE 觸發程式。

將先前提及的規則套用至參照限制項(其中母項表格或相依表格是類型化表格階層的成員)時,會考量套用至個別階層中任何表格的所有參照限制項。

ON UPDATE
指定當更新母項表格的列時,要對相依表格執行的動作。 子句是選用項目。 ON UPDATE NO ACTION 是預設值,而 ON UPDATE RESTRICT 是唯一的替代方案。

附註 一節說明 NO ACTION 和 RESTRICT 之間的差異。

check-constraint
定義檢查限制。 check-constraint 是必須評估為非 false 或在直欄之間定義的功能相依關係check-constraint
CONSTRAINT constraint-name
命名核對限制項。
CHECK (check-condition)
定義檢查限制。 對於表格的每一列,search-condition 必須為 true 或不明。
search-condition
search-condition 具有下列限制:
  • 直欄參照必須指向正在建立之表格的直欄。
  • search-condition 不能包含 TYPE 述詞。
  • search-condition 不能包含下列任何一項 (SQLSTATE 42621):
    • 查詢細項
    • XMLQUERY 或 XMLEXISTS 表示式
    • 取消參照作業或 DEREF 函數,其中限定範圍的參照引數不是物件 ID (OID) 直欄
    • 具有 SCOPE 子句的 CAST 規格
    • 直欄函數
    • 不是固定的函數
    • 定義為具有外部動作的函數
    • 使用 MODIFIES SQL 或 READS SQL DATA 定義的使用者定義函數
    • 主變數
    • 參數記號
    • sequence-references
    • OLAP 規格
    • 特別暫存器及內建函數,視特別暫存器的值而定
    • 廣域變數
    • 身分直欄以外所產生直欄的參照
    • 參照 XML 類型的直欄(在 VALIDATED 述詞中除外)
    • 容錯 nested-table-expression
functional-dependency
定義直欄之間的功能相依關係。
column-name DETERMINED BY column-name (column-name,...) DETERMINED BY (column-name,...)
母項直欄集包含緊接在 DETERmined BY 子句之前的已識別直欄。 子項直欄集包含緊接在 DETERmined BY 子句後面的已識別直欄。 search-condition 上的所有限制都適用於母項集及子項集直欄,且在直欄集中只容許簡式直欄參照 (SQLSTATE 42621)。 在功能相依關係中不可多次識別相同的直欄 (SQLSTATE 42709)。 直欄的資料類型不能是 LOB 資料類型、以 LOB 資料類型為基礎的特殊類型、XML 資料類型 或結構化類型 (SQLSTATE 42962)。 無法使用 ROW CHANGE TIMESTAMP 直欄作為主要索引鍵的一部分 (SQLSTATE 429BV)。 子直欄集中沒有任何直欄可以是可為空值的直欄 (SQLSTATE 42621)。

如果將核對限制指定為 column-definition 的一部分,則只能對相同的直欄進行直欄參照。 指定為表格定義一部分的核對限制可以具有直欄參照,以識別先前在 CREATE TABLE 陳述式中定義的直欄。 如果有不一致、條件重複或條件相同,就不會去檢查核對限制。 因此,可以定義矛盾或冗餘檢查限制項,導致在執行時可能發生錯誤。

可以指定 search-condition IS NOT NULL;然而,建議使用直欄的 NOT NULL 屬性,直接施行可空值性。 例如,如果薪資設為 NULL,則接受 CHECK (salary + bonus > 30000),因為 CHECK 限制必須滿足或不明,在此情況下,薪資不明。 然而,如果薪資設為 NULL,則 CHECK (salary IS NOT NULL) 會被視為 false,並違反限制。

當插入或更新表格中的列時,會強制 使用 search-condition 來檢查限制。 在表格上定義的核對限制項會自動套用至該表格的所有子表格。

在正常作業(例如插入、更新、刪除或設定完整性)期間,資料庫管理程式不會施行功能相依關係。 在查詢重寫期間,可能會使用功能相依關係來最佳化查詢。 如果未維護功能相依關係的完整性,可能會傳回不正確的結果。

constraint-attributes
定義與主要索引鍵、唯一、參照完整性或核對限制項相關聯的屬性。
ENFORCED NOT ENFORCED
指定資料庫管理程式是否在一般作業(例如插入、更新或刪除)期間施行限制。 預設值是由 ddl_constraint_def 配置參數的設定決定。 您可以透過明確指定 ENFORCED 或 NOT ENFORCED 來置換預設行為。
ENFORCED
資料庫管理程式會施行此限制。 在下列狀況下無法指定 ENFORCED:
  • 若為功能相依關係 (SQLSTATE 42621)
  • 當參照限制項參照暱稱時 (SQLSTATE 428G7)
NOT ENFORCED
資料庫管理程式未施行限制項。 如果存在相依 ENFORCED 參照限制項,則主要索引鍵限制項或唯一限制項不能是 NOT ENFORCED。
TRUSTED
可以信任資料以符合限制。 只有在表格中的資料獨立已知符合限制時,才必須使用 TRUSTED。 如果資料不符合限制項,則可能出現無法預期的查詢結果。 這是預設選項。
不得隨時違反參考限制。 查詢最佳化中使用參考資訊限制項,以及 REFRESH IMMEDIATE MQT 和暫置表格的漸進式處理。 如果違反限制項,這些處理程序可能會產生無法預期的結果或不正確的 MQT 及暫置表格內容。 例如,維護上下代表格的順序很重要。 當您想要將列新增至上下代表格時,必須先在母項表格中插入列。 若要從上下代表格中移除列,您必須先從子表格中刪除列。 這可確保子表格在任何時候中都不存在孤立列。 如果違反參考資訊限制,則相依 MQT 資料及暫置表格資料的漸進式維護可能會根據違反參考資訊限制進行最佳化,從而產生不正確的資料。
NOT TRUSTED
無法信任資料以符合限制。 NOT TRUSTED 適用於下列情況:資料符合大部分列的限制項,但無法獨立知道所有列或未來新增項目都將符合限制。 如果限制項為 NOT TRUSTED 且已啟用查詢最佳化,則不會使用它來執行與完全符合限制項的資料相依的最佳化。 NOT TRUSTED 只能指定給參照完整性限制 (SQLSTATE 42613)。
ENABLE QUERY OPTIMIZATION DISABLE QUERY OPTIMIZATION
指定在適當的情況下是否可以使用限制或功能相依關係來進行查詢最佳化。 預設值為 ENABLE QUERY OPTIMIZATION。
ENABLE QUERY OPTIMIZATION
限制項假設為 true 且可用於查詢最佳化。
DISABLE QUERY OPTIMIZATION
限制無法用於查詢最佳化。 無法對主要索引鍵及唯一限制項指定 DISABLE QUERY OPTIMIZATION (SQLSTATE 42613)。
OF type-name1
指定表格的直欄是根據 type-name1 所識別之結構化類型的屬性。 如果在沒有綱目名稱的情況下指定 type-name1,則會透過搜尋 SQL 路徑上的綱目來解析類型名稱(由靜態 SQL 的 FUNCPATH 前置處理選項及動態 SQL 的 CURRENT PATH 暫存器所定義)。 類型名稱必須是現有使用者定義類型 (SQLSTATE 42704) 的名稱,且必須是具有至少一個屬性 (SQLSTATE 42997) 的可實例化結構化類型 (SQLSTATE 428DP)。

如果未指定 UNDER,則必須指定物件 ID 直欄(請參閱 OID-column-definition)。 此物件 ID 直欄是表格的第一個直欄。 根據 type-name1 的屬性,物件 ID 直欄後面接著直欄。

HIERARCHY hierarchy-name
命名與表格階層相關聯的階層表格。 它與階層的根表格同時建立。 類型化表格階層中所有子表格的資料都儲存在階層表格中。 在 SQL 陳述式中無法直接參照階層表格。 hierarchy-nametable-namehierarchy-name(包括隱含或明確的綱目名稱)不得識別型錄中說明的表格、暱稱、視圖或別名。 如果指定綱目名稱,則必須與所建立表格的綱目名稱相同 (SQLSTATE 428DQ)。 如果在定義根表格時省略此子句,則系統會產生名稱。 此名稱包含正在建立的表格名稱,後面接著唯一字尾,以便 ID 在現有表格、視圖及暱稱的 ID 之間是唯一的。
UNDER supertable-name
指出表格是 supertable-name 的子表格。 超級表格必須是現有的表格 (SQLSTATE 42704),且必須使用立即超類型 type-name1 的結構化類型來定義表格 (SQLSTATE 428DB)。 table-namesupertable-name 的綱目名稱必須相同 (SQLSTATE 428DQ)。 supertable-name 所識別的表格不得已定義任何使用 type-name1 的現有子表格 (SQLSTATE 42742)。

表格的直欄包括超表格的物件 ID 直欄,其類型修改為 REF (type-name1) ,後面接著基於 type-name1 屬性的直欄(請記住類型包括其超類型的屬性)。 屬性名稱不能與 OID 直欄名稱相同 (SQLSTATE 42711)。

無法指定其他表格選項,包括表格空間、資料擷取、未起始記載及配送索引鍵選項。 這些選項繼承自超級表格 (SQLSTATE 42613)。

INHERIT SELECT PRIVILEGES
任何對超級表格具有 SELECT 專用權的使用者或群組,都會被授與對新建立子表格的同等專用權。 子表格定義者被認為是此特權的設保人。
typed-element-list
定義類型化表格的其他元素。 這包括直欄的其他選項、新增物件 ID 直欄(僅限根表格),以及表格上的限制項。
OID-column-definition
定義類型化表格的物件 ID 直欄。
REF IS OID-column-name USER GENERATED
指定在表格中定義物件 ID (OID) 直欄作為第一個直欄。 表格階層結構的根表格需要 OID (SQLSTATE 428DX)。 表格必須是非子表格的類型化表格(OF 子句必須存在)(SQLSTATE 42613) 。 直欄名稱定義為 OID-column-name,且不能與結構化類型 type-name1 的任何屬性名稱相同 (SQLSTATE 42711)。 直欄以類型 REF (type-name1)、NOT NULL 定義,並產生系統需要的唯一索引(具有預設索引名稱)。 此直欄稱為物件 ID 直欄OID 直欄。 關鍵字 USER GENERATED 指出在插入列時,使用者必須提供 OID 直欄的起始值。 插入列之後,無法更新 OID 直欄 (SQLSTATE 42808)。
with-options
定義適用於類型化表格直欄的其他選項。
column-name
指定為其指定其他選項的直欄名稱。 column-name 必須對應於表格的直欄名稱,而不是超級表格的直欄 (SQLSTATE 428DJ)。 直欄名稱只能出現在陳述式的一個 WITH OPTIONS 子句中 (SQLSTATE 42613)。

如果已指定選項作為類型定義的一部分 (在 CREATE TYPE 中) ,則這裡指定的選項會置換 CREATE TYPE 中的選項。

WITH OPTIONS column-options
定義指定直欄的選項。 請參閱先前說明的 column-options。 如果表格是子表格,則無法指定主要索引鍵或唯一限制 (SQLSTATE 429B3)。
LIKE table-name1view-namenickname
指定表格的直欄與指定表格 (table-name1)、視圖 (view-name) 或暱稱 (nickname) 的直欄具有相同的名稱及說明。 指定的表格、視圖或暱稱必須存在於型錄中,或者必須是宣告的暫存表格。 無法指定類型化表格或類型化視圖 (SQLSTATE 428EC)。
LIKE 的使用是 n 直欄的隱含定義,其中 n 是所識別表格(包括隱含地隱藏的直欄)、視圖或暱稱中的直欄數目。 新表格中對應於現有表格中隱含地隱藏直欄的直欄也會定義為隱含地隱藏。 隱含定義取決於 LIKE 之後指定的內容:
  • 如果指定表格,則隱含定義包括該表格的每一個直欄的直欄名稱、資料類型、隱藏屬性及可空值性性質。 如果未指定 EXCLUDING COLUMN DEFAULTS,則也會包含直欄預設值。
  • 如果指定視圖,則隱含定義包括該視圖中所定義全選的每一個結果直欄的直欄名稱、資料類型及可空值性性質。 視圖直欄的資料類型必須是適用於表格直欄的資料類型。
  • 如果指定暱稱,則隱含定義包括該暱稱的每一個直欄的直欄名稱、資料類型及可空值性性質。
  • 如果指定受保護表格,則新表格會繼承與識別表格相同的安全原則及受保護直欄。
  • 如果指定表格,且該表格包含 row-begin 直欄、row-end 直欄或 transaction-start-ID 直欄,則新表格的對應直欄只會繼承來源直欄的資料類型。 新直欄不會被視為已產生的直欄。
  • 如果指定包含句點的表格,則新表格不會繼承句點定義。
  • 如果指定系統期間時間表格,則新表格不是系統期間時間表格。
  • 如果指定使用依世代隨機方法的隨機配送表,且正在建立的新表格未共用相同的表格配送,則不會包括用來產生隨機配送值的 RANDOM_DISTRIBUTION_KEY 直欄。

根據 copy-attributes 子句,可以包括或排除直欄預設值及身分直欄屬性。 隱含定義不包括已識別表格、視圖或暱稱的任何其他屬性。 因此,新表格沒有任何主要索引鍵、唯一限制項、外部索引鍵限制項、參照完整性限制、觸發程式、索引、ORGANIZE BY 規格或 PARTITIONING KEY 規格。 表格會在表格空間中隱含或明確地由 IN 子句指定,且表格只有在指定選用子句時才會有任何其他選用子句。

在 LIKE 子句中識別表格且該表格包含 ROW CHANGE TIMESTAMP 直欄時,新表格的對應直欄只會繼承 ROW CHANGE TIMESTAMP 直欄的資料類型。 新直欄不會被視為已產生的直欄。

如果指定表格,且已啟動該表格的列或直欄層次存取控制,則新表格不會繼承該表格。

copy-options
這些選項指定是否複製來源結果表格定義(表格、視圖或全選)的其他屬性。
INCLUDING COLUMN DEFAULTS
系統會複製來源結果表格定義的每一個可更新直欄的直欄預設值。 無法更新的直欄將不會在所建立表格的對應直欄中定義預設值。

如果指定 LIKE table-name,且 table-name 識別基本表格、已建立暫存表格或宣告的暫存表格,則 INCLUDING COLUMN DEFAULTS 是預設值。 如果指定 LIKE table-nametable-name 識別暱稱,則 INCLUDING COLUMN DEFAULTS 沒有作用,且不會複製直欄預設值。

EXCLUDING COLUMN DEFAULTS
系統不會從來源結果表格定義複製直欄預設值。

除非指定 LIKE table-nametable-name 識別基本表格、已建立暫存表格或宣告的暫存表格,否則此子句是預設值。

INCLUDING IDENTITY COLUMN ATTRIBUTES
可能的話,會從來源結果表格定義複製身分直欄屬性。 如果表格、視圖或全選中對應直欄的元素是表格直欄的名稱,或直接或間接對映至具有身分內容之基本表格直欄名稱的視圖直欄名稱,則可以複製身分直欄屬性。 在所有其他情況下,新表格的直欄將不會取得身分內容。 例如:
  • 全選的選取清單包括身分直欄名稱的多個實例(亦即,多次選取相同的直欄)。
  • 全選的選取清單包括多個身分直欄(亦即,它涉及結合)。
  • 身分直欄包含在選取清單的表示式中
  • 全選包括設定作業(聯集、排除或交集)。
EXCLUDING IDENTITY COLUMN ATTRIBUTES
未從來源結果表格定義複製身分直欄屬性。
as-result-table
column-name
命名表格中的直欄。 如果指定直欄名稱清單,則它必須包含與全選結果表格中的直欄數目相同的名稱。 每一個 column-name 都必須是唯一且不完整的。 如果未指定直欄名稱清單,則表格的直欄會繼承全選結果表格的直欄名稱。

如果全選的結果表格具有未命名直欄的重複直欄名稱,則必須指定直欄名稱清單 (SQLSTATE 42908)。 未命名直欄是衍生自常數、函數、表示式或集作業(未使用選取清單的 AS 子句來命名)的直欄。

AS(全選
指定針對全選衍生結果表格中的每一個直欄,定義表格的對應直欄。 每一個定義的直欄都採用結果表格之對應直欄中的下列屬性(如果適用於資料類型):
  • 直欄名稱
  • 欄說明
  • 資料類型、長度、精準度及小數位數
  • 可空值性
不包括下列屬性(雖然可以使用 copy-options 來包括預設值及身分屬性):
  • 預設值
  • 身分屬性
  • 隱藏屬性
  • ROW CHANGE TIMESTAMP
  • 全選中所參照表格或視圖的任何其他選用屬性
下列限制適用:
  • 每個 select 清單元素都必須具有唯一名稱 (SQLSTATE 42711)。 AS 子句可以在 select 子句中使用,以提供唯一名稱。
  • 全選無法參照主機變數或併入參數標記。
  • 全選結果直欄的資料類型必須是適用於表格直欄的資料類型。
  • 如果針對全選中指定的任何表格啟動列或直欄層次存取控制 (RCAC),則 RCAC 不會重疊顯示至新表格。
  • 全選 不能包括 data-change-table-reference 子句 (SQLSTATE 428FL)。
  • 可以指定任何未參照類型化表格或類型化視圖的有效全選
WITH NO DATA | WITH DATA
決定是否在表格的直欄中填入資料:
WITH NO DATA
請勿執行全選。 它只用來定義未移入查詢結果的表格。
WITH DATA
執行全選,並在表格中移入查詢結果。
materialized-query-definition
column-name
命名表格中的直欄。 如果指定直欄名稱清單,則它必須包含與全選結果表格中的直欄數目相同的名稱。 每一個 column-name 都必須是唯一且不完整的。 如果未指定直欄名稱清單,則表格的直欄會繼承全選結果表格的直欄名稱。

如果全選的結果表格具有未命名直欄的重複直欄名稱,則必須指定直欄名稱清單 (SQLSTATE 42908)。 未命名直欄是衍生自常數、函數、表示式或集作業(未使用選取清單的 AS 子句來命名)的直欄。

如果指定 MAINTAINED FOR REPLICATION,直欄清單中的直欄名稱必須符合全選中所指定表格的直欄名稱。

AS
建立用於表格定義的查詢,並決定要併入表格中的資料。
全選
定義表格所根據的查詢。 產生的直欄定義與使用相同查詢所定義之視圖的直欄定義相同。 新表格中對應於全選中所參照基本表格之隱含隱藏直欄的直欄,在新表格中不會被視為隱藏。

每個 select 清單元素都必須有一個名稱(表示式使用 AS 子句)。 materialized-query-definition 定義具體化查詢表格的屬性。 所選擇的選項也會定義全選的內容,如下所示:

全選不能包括 data-change-table-reference 子句 (SQLSTATE 428FL)、fetch-clause 或 ORDER BY 子句 (SQLSTATE 428FJ)。

當指定 REFRESH DEFERRED 或 REFRESH IMMEDIATE 時,全選無法併入 (SQLSTATE 428EC):
  • 對具體化查詢表格、已建立暫存表格、宣告的暫存表格或任何 FROM 子句中類型化表格的參照
  • 視圖的全選違反具體化查詢表格全選上所列出任何限制的視圖參照
  • 作為參照類型(或基於此類型的特殊類型)的表示式
  • 具有下列任何屬性的函數:
    • EXTERNAL ACTION
    • LANGUAGE SQL
    • CONTAINS SQL
    • READS SQL DATA
    • MODIFIES SQL DATA
  • NOT SECURED 函數,如果函數參照具體化查詢表格,則會參照已啟動列或直欄存取控制的表格。
  • 相依於實體性質的函數(例如 DBPARTITIONNUM、HASHEDVALUE、RID_BIT、RID
  • ROW CHANGE 表示式或列的 ROW CHANGE TIMESTAMP 直欄的參照
  • 系統物件的表格或視圖參照(也不應指定解譯表格)
  • 屬於結構化類型、LOB 類型(或基於 LOB 類型的特殊類型)或 XML 類型的表示式
  • 受保護表格或受保護暱稱的參照
當指定 DISTRIBUTE BY REPLICATION 時,下列限制適用:
  • 不容許 GROUP BY 子句。
  • 具體化查詢表格必須僅參照單一表格;亦即,它不能包含結合。
指定 MAINTAINED BY REPLICATION 時,下列限制適用:
  • 查詢必須是由 SELECT 子句和 FROM 子句組成的次選取。
  • FROM 子句必須參照依列組織且未在現有備用表格定義中指定的單一表格。
  • 參照表格不能是範圍分割表格、多維度叢集表格、範圍叢集表格、時間表格或包含 LONG VARCHAR 或 LONG VARGRAPHIC 直欄的表格。
  • 所參照的表格無法受到列及直欄存取控制 (RCAC) 或標籤型存取控制 (LBAC) 的保護。
  • 選取清單只能包括直欄組織表格中支援其資料類型之表格直欄的直接參照。 無法使用任何表示式。
  • 無法使用選取清單中的直欄名稱清單或 AS 子句來重新命名在選取清單中指定的直欄。
  • 參照表格必須至少具有一個施行的主要索引鍵限制或唯一限制,且在選取清單中指定的直欄必須包括至少其中一個限制項中的所有索引鍵直欄。
當指定 REFRESH IMMEDIATE 時:
  • 查詢必須是子選取,例外是 GROUP BY 的輸入表格表示式支援 UNION ALL。
  • 查詢不能遞迴。
  • 查詢不能包括:
    • 暱稱的參照
    • 不是固定的函數
    • 純量全選
    • 具有全選的述詞
    • 特別暫存器及內建函數,視特別暫存器的值而定
    • 廣域變數
    • SELECT DISTINCT
    • 容錯 nested-table-expression
  • 如果 FROM 子句參照多個表格或視圖,則它只能定義內部結合,而不使用明確的 INNER JOIN 語法。
  • 指定 GROUP BY 子句時,下列考量適用:
    • 支援的直欄函數為 SUM、COUNT、COUNT_BIG 及 GROUPING(不含 DISTINCT)。 選取清單必須包含 COUNT (*) 或 COUNT_BIG (*) 直欄。 如果具體化查詢表格選取清單包含 SUM (X),其中 X 是可為空值的引數,則具體化查詢表格也必須在其選取清單中具有 COUNT (X)。 這些直欄函數不能是任何表示式的一部分。
    • 不容許 HAVING 子句。
    • 如果在多個分割區資料庫分割區群組中,則配送索引鍵必須是 GROUP BY 項目的子集。
  • 具體化查詢表格不得包含重複列,且視是否指定 GROUP BY 子句而定,會套用此唯一性需求特定的下列限制。
    • 當指定 GROUP BY 子句時,下列 uniqueness-related 限制適用:
      • 所有 GROUP BY 項目都必須包含在選取清單中。
      • 當 GROUP BY 包含 GROUPING SETS、CUBE 或 ROLLUP 時,SELECT 清單中的 GROUP BY 項目及相關聯的 GROUPING 直欄函數必須形成結果集的唯一索引鍵。 因此,必須滿足下列限制:
        • 不能重複任何分組集。 例如,不容許 ROLLUP(X,Y),X ,因為它相當於 GROUPING SETS((X,Y),(X),(X))
        • 如果 X 是在 GROUPING SETS、CUBE 或 ROLLUP 內出現的可為空值 GROUP BY 項目,則 GROUPING (X) 必須出現在選取清單中。
    • 未指定 GROUP BY 子句時,下列 uniqueness-related 限制適用:
      • 具體化查詢表格的唯一性需求是透過從每一個基礎表格中定義的其中一個唯一索引鍵限制項衍生具體化視圖的唯一索引鍵來達成。 因此,基礎表格必須至少定義一個唯一索引鍵限制項,且這些索引鍵的直欄必須出現在具體化查詢表格定義的選取清單中。
當指定 REFRESH DEFERRED 時:
  • 如果建立具體化查詢表格的目的是在後續陳述式中提供相關聯的暫置表格,則具體化查詢表格的全選必須遵循與使用 REFRESH IMMEDIATE 選項來建立具體化查詢表格的全選相同的限制及規則。
  • 如果查詢是遞迴的,則不會使用具體化查詢表格來最佳化查詢的處理。
  • 具體化查詢表格未用來最佳化靜態查詢的處理。

其全選包含 GROUP BY 子句的具體化查詢表格正在從全選中參照的表格彙總資料。 這類具體化查詢表格也稱為摘要表格。 摘要表格是具體化查詢表格的特殊類型。

如果全選參照的表格或視圖相依於已啟動列或直欄層次存取控制的表格,則移入具體化查詢表格時,會忽略那些列或直欄層次存取控制。 在已啟動列層次存取控制的情況下,會自動建立具體化查詢表格。 除非建立適當的許可權,或具有 SECADM 權限的使用者選擇取消啟動此具體化查詢表格上的列層次存取控制,否則使用者對此表格的直接存取權不會看到任何內容。 具體化查詢表格上的列及直欄層次存取控制不會影響 SQL 編譯器對具體化查詢表格的內部遞送。

refreshable-table-options
定義具體化查詢表格屬性的可重新整理選項。
DATA INITIALLY DEFERRED
資料不會作為 CREATE TABLE 陳述式的一部分插入表格中。 指定 table-name 的 REFRESH TABLE 陳述式用來將資料插入至表格中。
重新整理
指出如何維護表格中的資料。
DEFERRED
可以隨時使用 REFRESH TABLE 陳述式來重新整理表格中的資料。 在處理 REFRESH TABLE 陳述式時,表格中的資料只會將查詢結果反映為 Snapshot。 使用此屬性定義的系統維護具體化查詢表格不容許 INSERT、UPDATE 或 DELETE 陳述式 (SQLSTATE 42807)。 使用此屬性定義的使用者維護具體化查詢表格容許 INSERT、UPDATE 或 DELETE 陳述式。
立即
在 DELETE、INSERT 或 UPDATE 中對基礎表格所進行的變更會重疊顯示至具體化查詢表格。 在此情況下,表格的內容在任何時間點都與處理指定的 subselect 時相同。 使用此屬性定義的具體化查詢表格 (MQT) 不容許使用 INSERT、UPDATE 或 DELETE 陳述式 (SQLSTATE 42807)。 指定 MAINTAINED BY SYSTEM 子句時,不支援使用 REFRESH IMMEDIATE 選項的直欄組織的 MQT (SQL20058N)。
ENABLE QUERY OPTIMIZATION
在適當的情況下,可以使用具體化查詢表格來進行查詢最佳化。
DISABLE QUERY OPTIMIZATION
具體化查詢表格將不會用於查詢最佳化。 仍然可以直接查詢表格。
MAINTAINED BY
指定系統、使用者或抄寫工具是否維護具體化查詢表格中的資料。 預設值為 SYSTEM。
SYSTEM
指定具體化查詢表格中的資料是由系統維護。 定義為 ORGANIZE BY COLUMN 的 system-maintained 具體化查詢表格必須使用 REFRESH DEFERRED 及 DISTRIBUTE BY REPLICATION 選項。
使用者
指定具體化查詢表格中的資料是由使用者維護。 容許使用者對 user-maintained 具體化查詢表格執行更新、刪除或插入作業。 無法對 user-maintained 具體化查詢表格呼叫用於 system-maintained 具體化查詢表格的 REFRESH TABLE 陳述式。 只有 REFRESH DEFERRED 具體化查詢表格可以定義為 MAINTAINED by USER。
抄寫
指定由外部抄寫技術維護具體化查詢表格中的資料。 MAINTAINED BY REPLICATION 無法在分割的資料庫環境Db2 pureScale 環境 中指定 (SQLSTATE 56038)。 無法針對 replication-maintained 的具體化查詢表格(稱為 備用表格)發出用於 system-maintained 具體化查詢表格的 REFRESH TABLE 陳述式。 只有 REFRESH DEFERRED 具體化查詢表格可以定義為 MAINTAINED BY REPLICATION,且定義必須包括 ORGANIZE BY COLUMN。
FEDERATED_TOOL
指定由聯合抄寫工具維護具體化查詢表格中的資料。 無法針對 federated_tool-maintained 具體化查詢表格呼叫用於 system-maintained 具體化查詢表格的 REFRESH TABLE 陳述式。 只有 REFRESH DEFERRED 具體化查詢表格可以定義為 MAINTAINED BY FEDERATED_TOOL。

指定此選項時,CREATE TABLE 陳述式中的 select 子句不能包含基本表格的參照 (SQLSTATE 428EC)。

staging-table-definition
定義暫置表格透過相關聯具體化查詢表格間接支援的查詢。 具體化查詢表格的基礎表格也是其相關聯暫置表格的基礎表格。 暫置表格會收集需要套用至具體化查詢表格的變更,以將它與基礎表格的內容同步化。

如果全選參照的表格或視圖相依於已啟動列或直欄層次存取控制的表格,則在移入暫置表格時,會忽略那些列或直欄層次存取控制。 然而,在啟動列層次存取控制的情況下,會自動建立暫置表格。 除非建立適當的許可權,或具有 SECADM 權限的使用者選擇取消啟動此暫置表格上的列層次存取控制,否則使用者對此暫置表格的直接存取不會看到任何內容。 暫置表格上的列及直欄層次存取控制不會影響將暫置表格所擷取的變更套用至相關聯具體化查詢表格的內部處理程序。

staging-column-name
命名暫置表格中的直欄。 如果指定直欄名稱清單,則它必須包含具體化查詢表格中已定義暫置表格之現有直欄的個以上名稱。 如果具體化查詢表格是抄寫的具體化查詢表格,或定義具體化查詢表格的查詢未包含 GROUP BY 子句,則直欄名稱清單所包含的名稱必須比為其定義暫置表格之具體化查詢表格中的直欄多個。 每一個直欄名稱必須是唯一且不完整的。 如果未指定直欄名稱清單,則表格的直欄會繼承相關聯具體化查詢表格的直欄名稱。 其他直欄的名稱為 GLOBALTRANSTIME 和 GLOBALTRANSTIME,如果需要第三個直欄,則名稱為 OPERATIONTYPE。
表 2. 暫置表格中附加的額外直欄
直欄名稱 資料類型 直欄說明
GLOBALTRANSID CHAR(8) FOR BIT DATA 每一個延伸列的廣域交易 ID
GLOBALTRANSTIME CHAR(13) FOR BIT DATA 交易的時間戳記
OPERATIONTYPE INTEGER 延伸列的作業,可以是插入、更新或刪除。

如果相關聯具體化查詢表格的任何直欄與任何產生的直欄名稱重複,則必須指定直欄名稱清單 (SQLSTATE 42711)。

FOR table-name2
指定用於暫置表格定義的具體化查詢表格。 名稱(包括隱含或明確綱目)必須識別存在於以 REFRESH DEFERRED 定義之現行伺服器上的具體化查詢表格。 相關聯具體化查詢表格的全選必須遵循與使用 REFRESH IMMEDIATE 選項來建立具體化查詢表格之全選相同的限制及規則。

如果暫置表格的內容與相關聯的具體化查詢表格及基礎來源表格一致,則可以呼叫 REFRESH TABLE 陳述式,使用暫置表格的內容來重新整理具體化查詢表格。

PROPAGATE IMMEDIATE
在刪除、插入或更新作業中對基礎表格所做的變更會重疊顯示到相同刪除、插入或更新作業中的暫置表格。 如果暫置表格未標示為不一致,則其內容在任何時間點都是自前次重新整理具體化查詢表格以來對基礎表格所做的差異變更。
ORGANIZE BY
指定如何在表格的資料頁面中組織資料。
下列限制適用於 column-organized MQT:
  • 陰影表格以外的 MQT 必須參照與 MQT 具有相同組織的表格。
  • 建立直欄組織 MQT,即使 dft_table_org 資料庫配置參數設為 COLUMN 時,也必須指定 ORGANIZE BY COLUMN 子句。
  • 對於 column-organized MQT,可以使用下列類型的表格:
    • 備用表格
    • User-maintained MQTs
    • 使用 REFRESH DEFERREDDISTRIBUTE BY REPLICATION 子句定義的系統維護 MQT。

預設組織由 dft_table_org 資料庫配置參數的值決定。

資料依列儲存在表格的資料頁面中。 給定的資料頁面會儲存表格一或多列的資料。
COLUMN
資料依直欄儲存在表格的資料頁面中。 每一個資料頁面會儲存表格中一個直欄的資料。
ROW USING
資料依列儲存在表格的資料頁面中,並使用維度子句、索引鍵順序或插入時間來進一步組織。 如果您指定維度子句、鍵順序或插入時間,則指定 ROW USING 是選用項目,除非資料庫的預設表格組織是 COLUMN,在此情況下,指定 ROW USING 是必要項目。
DIMENSIONS (column-name,...)
指定用於叢集化表格資料的每一個直欄或直欄群組的維度。 定義指定此子句的表格稱為多維度叢集 (MDC) 表格。 在維度清單內使用括弧,以指定將直欄群組視為單一維度。 DIMENSIONS 關鍵字是選用項目。

系統會自動維護每一個指定維度的叢集區塊索引,並維護由子句中使用的所有直欄組成的區塊索引(如果沒有任何叢集區塊索引包含它們全部)。 在 ORGANIZE BY 子句中使用的直欄集必須遵循指定 CLUSTER 之 CREATE INDEX 陳述式的規則。

必須為表格定義 ORGANIZE BY 子句中指定的每一個直欄名稱 (SQLSTATE 42703)。 維度在維度清單中不能出現多次 (SQLSTATE 42709)。 維度不能包含 ROW CHANGE TIMESTAMP 直欄、row-begin 直欄、row-end 直欄、transaction-start-ID 直欄 (SQLSTATE 429BV) 或 XML 直欄 (SQLSTATE 42962)。 如果表格使用延伸列大小,則資料類型為 VARCHAR 或 VARGRAPHIC 的每一個維度直欄都不能具有大於 24 個位元組的長度屬性 (SQLSTATE 54010)。

表格的頁面會以大小相等的區塊(即表格空間的延伸範圍大小)來排列,且每一個區塊的所有列都包含相同維度值組合。

表格可以是多維度叢集 (MDC) 表格及已分割表格。 這類表格中的直欄可以同時在 range-partition-spec 及 MDC 索引鍵中使用。 表格分割是多直欄,不是多維度。

若為 Db2 9.7 Fix Pack 1 或更新版本所建立的分割 MDC 表格,則會分割區塊索引。 已分割區塊索引放置遵循一般已分割索引儲存體放置規則。 給定資料分割區的所有索引分割區(包括 MDC 區塊索引)共用單一索引物件。 依預設,每一個特定資料分割區的索引分割區與資料分割區位於相同的表格空間中。 這可以使用分割區層次 INDEX IN 子句進行置換。

對於使用 Db2 V9.7 或更舊版本建立的 MDC 表格,區塊索引未分割且在重建時保持未分割狀態。 具有已分割區塊索引的 MDC 表格可以與具有未分割區塊索引的 MDC 表格同時存在於相同的資料庫中。 若要將未分割的區塊索引變更為分割的區塊索引,請使用線上表格移動來移轉 MDC 表格。

KEY SEQUENCE sequence-key-spec
指定根據指定的鍵順序值範圍,以具有固定大小的遞增鍵順序來組織表格。 以這種方式組織的表格稱為範圍叢集化表格。 所定義範圍內每一個可能的鍵值在實體表格中具有預定位置。 建立表格時,範圍叢集表格所需的儲存體必須可用,且必須足以包含指定範圍內的列數乘以列大小(如需決定空間需求的詳細資料,請參閱列大小限制位元組計數)。
column-name
指定包含在唯一索引鍵中的表格直欄,以決定範圍叢集化表格的順序。 直欄的資料類型必須是 SMALLINT、INTEGER 或 BIGINT (SQLSTATE 42611),且直欄必須定義為 NOT NULL (SQLSTATE 42831)。 在順序鍵中不能多次識別相同的直欄。 識別的直欄數目不得超過 64 (SQLSTATE 54008)。

將在型錄中針對直欄自動建立唯一索引項目,其索引鍵順序以每一個直欄的升冪順序指定。 索引的名稱將是 SQL,後面接著字元時間戳記 (yymmddhhmmssxxx),並以 SYSIBM 作為綱目名稱。 儲存體中未建立實際索引物件,因為表格組織是依這個索引鍵來排序。 如果在與範圍叢集化表格順序鍵相同的直欄上定義主要索引鍵或唯一限制項,則會將這個相同的索引登錄用於限制項。

對於索引鍵順序規格,存在核對限制項以反映直欄限制項。 如果指定 DISALLOW OVERFLOW 子句,則檢查限制項的名稱是 RCT,且會施行檢查限制項。 如果指定 ALLOW OVERFLOW 子句,則檢查限制項的名稱為 RCT_OFLOW,且不會強制執行檢查限制項。

STARTING FROM 常數
指定 column-name 範圍低階的常數值。 只有在指定 ALLOW OVERFLOW 選項時,才容許小於指定常數的值。 如果 column-name 是 SMALLINT 或 INTEGER 直欄,則常數必須是 INTEGER 常數。 如果 column-name 是 BIGINT 直欄,則常數必須是 INTEGER 或 BIGINT 常數 (SQLSTATE 42821)。 如果未指定起始常數,則預設值為 1。
ENDING AT 常數
指定 column-name 範圍高階的常數值。 只有在指定 ALLOW OVERFLOW 選項時,才容許大於指定常數的值。 結束常數的值必須大於起始常數。 如果 column-name 是 SMALLINT 或 INTEGER 直欄,則常數必須是 INTEGER 常數。 如果 column-name 是 BIGINT 直欄,則常數必須是 INTEGER 或 BIGINT 常數 (SQLSTATE 42821)。
ALLOW OVERFLOW
指定 range-clustered 表格容許索引鍵值超出已定義值範圍的列。 建立 range-clustered 表格以容許溢位時,索引鍵值超出範圍的列會放置在已定義範圍的結尾,而沒有任何預定順序。 與索引鍵值在定義範圍內的列上的作業相比,涉及這些溢位列的作業效率較低。
DISALLOW OVERFLOW
指定 range-clustered 表格不容許索引鍵值不在已定義值範圍內的列 (SQLSTATE 23513)。 不允許溢位的範圍叢集化表格一律會以遞增鍵順序維護所有列。

如果表格是 range-clustered 具體化查詢表格,則無法指定 DISALLOW OVERFLOW 子句 (SQLSTATE 429BG)。

PCTFREE 整數
指定要保留作為可用空間的每一個頁面的百分比。 每一個頁面上的第一列會在沒有限制的情況下新增。 將其他列新增至頁面時,至少會保留頁面的整數百分比作為可用空間。 整數的值範圍可以從 0 到 99。 系統型錄 (SYSCAT.TABLES) 中的 PCTFREE 值 -1 會解譯為預設值。 表格頁面的預設 PCTFREE 值為 0。
INSERT TIME
指定相對於列的插入時間,在表格中叢集化列。 列會插入表格物件的邏輯結尾,而不是搜尋可用空間。

依插入時間組織的表格稱為插入時間叢集 (ITC) 表格。 此類型的表格可以使用 REORG TABLE RECLAIM EXTENTS 來收回可用的延伸範圍,以供表格空間中的其他物件立即使用。

使用隱含建立的虛擬維度來叢集化資料。 系統會自動維護此虛擬維度的叢集化區塊索引。 無法操作虛擬維度,且它不會對表格中存在的每一列使用任何空間。 表格頁面會以相等大小的區塊來排列,這是表格空間的延伸範圍大小。

如果表格是類型化表格 (SQLSTATE 428DH),則無法指定 ORGANIZE BY INSERT TIME 子句。

DATA CAPTURE
指出是否要將 inter-database 資料抄寫的額外資訊寫入日誌。 建立子表格時無法指定此子句 (SQLSTATE 428DR)。

如果未指定子句,且該表格不是類型化表格,則預設值是由建立表格時綱目的 DATA CAPTURE 設定所決定。

NONE
指出不會記載任何額外資訊。
變更
指出此表格的 SQL 變更相關額外資訊將寫入日誌。 如果將抄寫此表格,且使用「擷取程式」從日誌中擷取此表格的變更,則需要此選項。

如果表格是非子表格的類型化表格,則不支援此選項 (SQLSTATE 428DH)。

IN tablespace-name,...
識別將在其中建立表格的表格空間。 表格空間必須存在,它們必須位於相同的資料庫分割區群組中,而且它們必須都是一般 DMS 或所有大型 DMS 或所有 SMS 表格空間 (SQLSTATE 42838),且陳述式的授權 ID 具有 USE 專用權。

表格層次最多只能有一個 IN 子句。 表格使用的所有資料表格空間都必須具有相同的頁面大小及延伸範圍大小。

如果僅指定一個表格空間,則所有表格組件都會儲存在此表格空間中。 建立子表格時無法指定此子句 (SQLSTATE 42613),因為表格空間繼承自表格階層結構的根表格。

如果未指定此子句,則資料庫管理程式會選擇具有最小足夠頁面大小的表格空間(從資料庫中現有的表格空間集內), 其中列大小在頁面大小的列大小限制內,並且其上的陳述式授權 ID 具有 USE 權限。

如果有多個表格空間符合條件,請依下列喜好設定順序選擇表格空間,視如何將表格空間的 USE 專用權授與陳述式授權 ID 而定:
  1. 授權 ID
  2. 授權 ID 被授與的角色
  3. 授權 ID 所屬於的群組
  4. 授與授權 ID 所屬群組的角色
  5. 公用
  6. 已授與 PUBLIC 的角色
如果仍有多個表格空間符合條件,資料庫管理程式會做出最終選擇。
在下列情況下,表格空間判定可能會變更:
  • 捨棄或建立表格空間
  • 已授與或撤銷 USE 專用權

分割表格可以讓其資料分割區分散在多個表格空間中。 指定多個表格空間時,所有表格空間都必須存在,且必須全部為 SMS 或一般 DMS 或大型 DMS 表格空間 (SQLSTATE 42838)。 陳述式的授權 ID 必須保留所有指定表格空間的 USE 專用權。

表格的足夠分頁大小取決於列的位元組計數或欄數。 如需相關資訊,請參閱列大小限制

當表格放置在大型表格空間中時:
  • 表格可以大於一般表格空間中的表格。 如需表格及表格空間限制的相關資訊,請參閱 SQL 限制
  • 表格可以支援每個資料頁面超過 255 列,這可以改善資料頁面上的空間使用情形。
  • 與位於一般表格空間的表格上定義的索引相比較,在表格上定義的索引對於每列項目將需要額外 2 個位元組。
CYCLE NO CYCLE
指定沒有明確表格空間的資料分割區數目是否可以超出指定的表格空間數目。
CYCLE
指定如果沒有明確表格空間的資料分割區數目超出指定的表格空間數目,則會以循環式方式將表格空間指派給資料分割區。
NO CYCLE
指定沒有明確表格空間的資料分割區數目不得超出指定的表格空間數目 (SQLSTATE 428G1)。 此選項可防止將表格空間循環指派給資料分割區。
tablespace-options
指定要儲存索引或長直欄值的表格空間。 如需表格空間類型的詳細資料,請參閱 CREATE TABLESPACE
INDEX IN tablespace-name
識別要在其中建立未分割表格上的任何索引或分割表格上的未分割索引的表格空間。 指定的表格空間必須存在;如果表格在 DMS 表格空間中有資料,則必須是 DMS 表格空間;如果分割的表格在 SMS 表格空間中有資料,則必須是 SMS 表格空間;它必須是陳述式授權 ID 具有 USE 專用權的表格空間;而且它必須與 tablespace-name 位於相同的資料庫分割區群組中 (SQLSTATE 42838)。

當建立表格時,可以指定哪個表格空間將包含索引,如果是分割表格,則可以指定未分割索引之 CREATE INDEX 陳述式的 IN 子句來完成。 表格空間的 USE 專用權檢查是在建立表格時執行,而不是在稍後建立索引時執行。

若為分割表格上的未分割索引,索引的儲存體如下所示:
  • CREATE INDEX 陳述式的 IN 子句所使用的表格空間
  • 指定給 CREATE TABLE 陳述式的 INDEX IN 子句的 table-level 表格空間
  • 如果未指定上述任一項,則索引會儲存在第一個附加或可見資料分割區的表格空間中
如需分割表格上分割索引的相關資訊,請參閱 partition-element INDEX IN 子句的說明。
LONG IN tablespace-name
識別要儲存任何長直欄值的表格空間。 長直欄包括具有 LOB 資料的直欄類型、XML 類型、以任何這些類型作為來源類型的特殊類型,或者以無法行內儲存其值的使用者定義結構化類型所定義的任何直欄。 僅當 IN 子句識別 DMS 表格空間時才容許此選項。
附註: 自動儲存體表格空間也是 DMS 表格空間。

指定的表格空間必須存在。 如果它是儲存資料的相同表格空間,則可以是一般表格空間;否則,它必須是陳述式的授權 ID 具有 USE 專用權的大型 DMS 表格空間。 它也必須位於與 tablespace-name 相同的資料庫分割區群組中 (SQLSTATE 42838)。

只有在建立表格時,才能指定哪些表格空間將包含 long、LOB 或 XML 直欄。 對 USE 專用權的檢查是在建立表格時執行,而不是在稍後新增 long 或 LOB 直欄時執行。

如需控管 LONG IN 子句與分割表格搭配使用的規則,請參閱分割表格中的大型物件行為

distribution-clause
指定資料庫分割或在多個資料庫分割區之間配送資料的方式。
DISTRIBUTE BY HASH (column-name,...)
指定在指定直欄上使用預設雜湊函數作為跨資料庫分割區的配送方法。 指定的直欄稱為配送索引鍵
  • 每一個直欄名稱必須是識別表格直欄的不完整名稱 (SQLSTATE 42703)。
  • 不能多次識別相同的直欄 (SQLSTATE 42709)。
  • 如果直欄的資料類型為 BLOB、CLOB、DBCLOB、XML、基於任何這些類型的特殊類型或結構化類型 (SQLSTATE 42962),則無法將直欄用作配送索引鍵的一部分。
  • 配送索引鍵不能包含 ROW CHANGE TIMESTAMP 直欄 (SQLSTATE 429BV)。
  • 無法為屬於子表格的表格指定配送索引鍵,因為配送索引鍵繼承自表格階層結構中的根表格 (SQLSTATE 42613)。
  • 配送索引鍵不能包含列開始、列結束或交易開始 ID 直欄。
  • 如果未指定 DISTRIBUTE BY HASH 子句,且表格位於具有多個資料庫分割區的多個分割區資料庫分割區群組中,則會自動定義預設配送索引鍵。
  • 配送索引鍵的直欄必須是組成任何強制唯一限制項的直欄子集。

如果沒有任何直欄滿足預設配送索引鍵的需求,則會建立沒有直欄的表格。 此類表格僅容許在單一分割區資料庫分割區群組上定義的表格空間中。

對於在單一分割區資料庫分割區群組上定義的表格空間中的表格,可以使用具有對配送索引鍵有效之資料類型的任何直欄集合來定義配送索引鍵。 如果您未指定此子句,則不會建立配送索引鍵。

如需與配送索引鍵相關的限制,請參閱規則

DISTRIBUTE BY RANDOM
指定資料庫管理程式將選取配送索引鍵,以將資料平均分散到資料庫分割群組的所有資料庫分割區。 資料庫管理程式使用兩種方法來達成此目的:
  • 隨機(依唯一):如果表格包含唯一或主要索引鍵,則會使用索引鍵直欄的唯一性質來建立資料的隨機傳播。 使用唯一索引鍵或主要索引鍵的直欄作為配送索引鍵。
  • 依世代隨機:如果表格沒有唯一或主要索引鍵,則資料庫管理程式將在表格中包括直欄,以產生並儲存產生的值,從而在雜湊函數中使用。 直欄將使用 IMPLICITLY HIDDEN 子句建立,因此除非明確包括,否則它不會出現在查詢中。 當新列新增至表格時,會自動產生直欄的值。 依預設,直欄名稱為 RANDOM_DISTRIBUTION_KEY。 如果它與現有直欄發生衝突,則資料庫管理程式會產生非衝突的名稱。
DISTRIBUTE BY REPLICATION
針對定義表格所在的表格空間,指定在資料庫分割區群組的每一個資料庫分割區上實際抄寫儲存在表格中的資料。 這表示表格中所有資料的副本存在於每一個資料庫分割區上。 此選項只能指定給具體化查詢表格 (SQLSTATE 42997)。
partitioning-clause
指定如何在資料庫分割區內分割資料。
PARTITION BY RANGE range-partition-spec
指定表格的表格分割方法。
partition-expression
指定定義範圍的索引鍵資料,以決定資料的目標資料分割區。
column-name
識別 table-partitioning 鍵的直欄。 column-name 必須是識別表格直欄的不完整名稱 (SQLSTATE 42703)。 不能多次識別相同的直欄 (SQLSTATE 42709)。 資料類型為 BLOB、CLOB、DBCLOB、XML、特殊類型(基於任何這些類型)或結構化類型的直欄無法作為 table-partitioning 鍵的一部分 (SQLSTATE 42962)。

範圍規格中使用的數值文字由數值文字的規則控管。 根據為數值常數指定的規則,在對應數值直欄的範圍中使用的所有數值文字(小數浮點特殊值除外)都會解譯為整數、浮點或小數常數。 因此,對於十進位浮點直欄,可在資料分割區的範圍規格中使用的最小及最大數值常數值分別是最小 DOUBLE 值及最大 DOUBLE 值。 可以在範圍規格中使用小數浮點特殊值。 所有十進位浮點特殊值都解譯為大於 MINVALUE 且小於 MAXVALUE。

表格分割直欄不能包含 ROW CHANGE TIMESTAMP 直欄 (SQLSTATE 429BV)。 識別的直欄數目不得超出 16 (SQLSTATE 54008)。

空值 LAST 或 NULLS FIRST
指出表格分割鍵直欄中具有空值之列的分割區放置。 這些子句不會影響 ORDER BY 子句中傳回的列順序。
NULLS LAST
指出將空值作為最高可能值進行比較,並置於以 MAXVALUE 結尾的範圍內。
NULLS FIRST
指出將空值作為可能的最低值進行比較,並置於從 MINVALUE 開始的範圍內。
partition-element
指定資料分割鍵的範圍,以及將儲存範圍內表格列的表格空間。
PARTITION partition-name
命名資料分割區。 名稱不得與表格的任何其他資料分割區相同 (SQLSTATE 42710)。 如果未指定此子句,則名稱將是 PART 後接整數值的字元格式,以讓表格的名稱是唯一的。
boundary-spec
指定資料分割區的界限。 最低資料分割區必須包括 starting-clause,最高資料分割區必須包括 ending-clause (SQLSTATE 56016)。 最低與最高之間的資料分割區可以包括 starting-clause、ending-clause 或兩者。 如果僅指定 ending-clause,則前一個資料分割區也必須包括 ending-clause (SQLSTATE 56016)。
starting-clause
指定資料分割區範圍的低階。 必須至少指定一個起始值,且值數不超過資料分割鍵中的直欄數目 (SQLSTATE 53038)。 如果指定的值少於直欄數目,則其餘值隱含地是 MINVALUE。
STARTING FROM
介紹 starting-clause
常數
指定常數值,其資料類型可指派給其對應之 column-name 的資料類型 (SQLSTATE 53045)。 該值不得在表格的任何其他界限規格範圍內 (SQLSTATE 56016)。
MINVALUE
指定低於其對應之 column-name 資料類型的最低可能值的值。
MAXVALUE
指定大於其對應之 column-name 資料類型的最大可能值的值。
INCLUSIVE
指出要將指定的範圍值併入資料分割區中。
EXCLUSIVE
指出從資料分割區中排除指定的常數值。 當指定 MINVALUE 或 MAXVALUE 時,會忽略此規格。
ending-clause
指定資料分割區範圍的高階。 必須至少指定一個起始值,且值數不超過資料分割鍵中的直欄數目 (SQLSTATE 53038)。 如果指定的值少於直欄數,則其餘值隱含地為 MAXVALUE。
ENDING AT
介紹 ending-clause
常數
指定常數值,其資料類型可指派給其對應之 column-name 的資料類型 (SQLSTATE 53045)。 該值不得在表格的任何其他界限規格範圍內 (SQLSTATE 56016)。
MINVALUE
指定低於其對應之 column-name 資料類型的最低可能值的值。
MAXVALUE
指定大於其對應之 column-name 資料類型的最大可能值的值。
INCLUSIVE
指出要將指定的範圍值併入資料分割區中。
EXCLUSIVE
指出從資料分割區中排除指定的常數值。 當指定 MINVALUE 或 MAXVALUE 時,會忽略此規格。
IN tablespace-name
指定要儲存資料分割區的表格空間。 具名表格空間必須具有與已分割表格的其他表格空間相同的分頁大小、位於相同的資料庫分割區群組,以及以相同的方式管理空間 (SQLSTATE 42838);它必須是陳述式的授權 ID 具有 USE 專用權的表格空間。 如果未指定此子句,依預設會從針對表格指定的表格空間清單中以循環式方式指派表格空間。 如果未使用 LONG IN 子句為大型物件指定表格空間,則會將大型物件放置在與資料分割區其餘列相同的表格空間中。 對於已分割表格,LONG IN 子句可用來提供表格空間清單。 此清單以循環式方式使用,以針對每一個資料分割區放置大型物件。 如需控管 LONG IN 子句與分割表格搭配使用的規則,請參閱已分割表格中的大型物件行為

如果未在 CREATE TABLE 或 CREATE INDEX 陳述式上指定 INDEX IN 子句,則索引會放置在與表格的第一個可見或附加分割區相同的表格空間中。

INDEX IN tablespace-name
指定要儲存已分割表格上已分割索引的表格空間。

partition-element 層次 INDEX IN 子句只會影響已分割索引的儲存體。 索引的儲存體如下所示:

  • 如果建立表格時在分割區層次指定 INDEX IN 子句,則已分割的索引會儲存在指定的表格空間中。
  • 如果在建立表格時未在分割區層次指定 INDEX IN 子句,則已分割的索引會儲存在對應資料分割區的表格空間中。

只有在資料表格空間是 DMS 表格空間,且 INDEX IN 子句指定的表格空間是 DMS 表格空間時,才能指定 INDEX IN 子句。 如果資料表格空間是 SMS 表格空間,則會傳回錯誤 (SQLSTATE 42839)。

LONG IN tablespace-name
識別要儲存任何長直欄值的表格空間。 長直欄包括具有 LOB 資料的直欄類型、XML 類型、以任何這些類型作為來源類型的特殊類型,或者以無法行內儲存其值的使用者定義結構化類型所定義的任何直欄。 僅當 IN 子句識別 DMS 表格空間時才容許此選項。
附註: 自動儲存體表格空間也是 DMS 表格空間。

指定的表格空間必須存在。 如果它是儲存資料的相同表格空間,則可以是一般表格空間;否則,它必須是陳述式的授權 ID 具有 USE 專用權的大型 DMS 表格空間。 它也必須位於與 tablespace-name 相同的資料庫分割區群組中 (SQLSTATE 42838)。

只有在建立表格時,才能指定哪些表格空間將包含 long、LOB 或 XML 直欄。 對 USE 專用權的檢查是在建立表格時執行,而不是在稍後新增 long 或 LOB 直欄時執行。

如需控管 LONG IN 子句與分割表格搭配使用的規則,請參閱分割表格中的大型物件行為

EVERY(常數
使用自動產生的語法形式時,指定每一個資料分割區範圍的寬度。 將從 STARTING FROM 值開始建立資料分割區,並在範圍中包含此數目的值。 只有由單一數值或日期時間直欄分割的表格才支援這種形式的語法 (SQLSTATE 53038)。

如果分割鍵直欄是數值類型,則第一個分割區的起始值是在 starting-clause 中指定的值。 第一個及所有其他分割區的結束值是透過將分割區的起始值新增至在 EVERY 子句中指定為常數的增量值來計算。 計算所有其他分割區的起始值時,會採用前一個分割區的起始值,並加上在 EVERY 子句中指定為常數的增量值。

如果分割鍵直欄是 DATE 或 TIMESTAMP,則第一個分割區的起始值是在 starting-clause 中指定的值。 第一個及所有其他分割區的結束值是透過將分割區的起始值新增至在 EVERY 子句中指定為標示持續時間的增量值來計算。 計算所有其他分割區的起始值時,會採用前一個分割區的起始值,並加上在 EVERY 子句中指定為標示持續時間的增量值。

對於數值直欄,EVERY 值必須是正數常數,對於日期時間直欄,EVERY 值必須是標示的持續時間 (SQLSTATE 53045)。

壓縮
指定是否要對表格使用列壓縮。 ddl_compression_def 配置參數決定 COMPRESS 關鍵字的預設值。
NO
已停用列壓縮。
YES
已啟用列壓縮。 表格上的插入及更新作業使用列壓縮。 也會壓縮所有存在的 XML 儲存體物件。 對於調適性列壓縮和典型列壓縮,在表格中充分移入資料之後,會自動建立表格層次壓縮定義檔。 這也適用於 XML 儲存體物件中的資料;如果 XML 儲存體物件中有足夠的資料,則會自動建立壓縮定義檔,並對 XML 文件進行壓縮。
附註: 不論您使用調適性或標準列壓縮,套用至 XML 儲存體物件的壓縮都相同。

對於調適性列壓縮,一旦在表格中插入或變更資料,即會建立或更新 page-level 壓縮定義檔。

ADAPTIVE
啟用調適性壓縮,並使用 table-level 和 page-level 壓縮定義檔來壓縮記錄。 COMPRESS YES ADAPTIVE 的功能是 COMPRESS YES STATIC 功能的超集。 當明確指定 COMPRESS YES 時,這是預設值。
STATIC
使用 table-level 壓縮定義檔來啟用標準列壓縮。 這是舊版 Db2 中存在的列壓縮功能。 當依預設使用列壓縮,但未明確指定 COMPRESS YES 時,這是預設值。
VALUE COMPRESSION
這可確定要使用的列格式。 每一種資料類型都有不同的位元組計數,視所使用的列格式而定。 如需相關資訊,請參閱位元組計數。 如果表格是類型化表格,則只有類型化表格階層結構的根表格才支援此選項 (SQLSTATE 428DR)。

空值以 3 個位元組儲存。 此空間等於或小於 VALUE COMPRESSION 對於所有資料類型的直欄處於非作用中時所佔用的空間,但 CHAR (1) 除外。 直欄是否定義為可為空值對列大小計算沒有影響。 資料類型為 VARCHAR、VARGRAPHIC、LONG VARCHAR、LONG VARGRAPHIC、CLOB、DBCLOB、VARBINARY、BLOB 或 XML 之直欄的零長度資料值只能使用 2 個位元組儲存,這小於 VALUE COMPRESSION 處於非作用中時所需要的儲存體。 當使用 COMPRESS SYSTEM DEFAULT 選項定義直欄時,這也容許使用 3 個位元組的總儲存體來儲存直欄的系統預設值。 用來支援此項的列格式會決定每一種資料類型的位元組計數,且在更新至空值、零長度值或系統預設值時,可能會導致資料片段化。

WITH RESTRICT ON DROP
指出無法捨棄表格,且無法捨棄包含表格的表格空間。
NOT LOGGED INITIALLY
在建立表格的相同工作單元中,透過「插入」、「刪除」、「更新」、「建立索引」、「捨棄索引」或「變更表格」作業對表格進行的任何變更都不會記載。 如需使用此選項時的其他考量,請參閱此陳述式的 附註 一節。

即會記載所有型錄變更及儲存體相關資訊,以及在後續工作單元中對表格執行的所有作業。

附註: 如果針對已啟動 NOT LOGGED INITIALLY 屬性的表格發生非記載活動,且如果陳述式失敗 (導致回復) 或執行 ROLLBACK TO SAVEPOINT ,則會回復整個工作單元 (SQL1476N)。 此外,在發生回復之後,已啟動 NOT LOGGED INITIALLY 屬性的表格會標示為無法存取,且只能捨棄。 因此,在其中啟動 NOT LOGGED INITIALLY 屬性的工作單元內發生錯誤的機會應該最小化。
CCSID
指定儲存在表格中之字串資料的編碼方法。 如果未指定 CCSID 子句,則 Unicode 資料庫的預設值為 CCSID UNICODE,其他所有資料庫的預設值為 CCSID ASCII。
ASCII
指定以資料庫字碼頁編碼字串資料。 如果資料庫是 Unicode 資料庫,則無法指定 CCSID ASCII (SQLSTATE 56031)。
UNICODE
指定以 Unicode 編碼字串資料。 字元資料採用 UTF-8。 不容許圖形資料。
如果資料庫不是 Unicode 資料庫,則可以使用 CCSID UNICODE 來建立表格,但是下列規則適用:
  • 在建立表格之前 (SQLSTATE 56031),必須在資料庫配置中指定替代對照順序。 CCSID UNICODE 表格與資料庫配置中指定的替代對照順序進行對照。

    唯一支援的替代對照順序是 IDENTITY_16BIT。

  • 圖形類型、XML 類型及使用者定義類型無法在 CCSID UNICODE 表格中使用 (SQLSTATE 560C1)。
  • 錨點資料類型無法錨點至以 CCSID UNICODE 建立之表格的直欄 (SQLSTATE 428HS)。
  • 表格不能同時指定 CCSID UNICODE 子句及 DATA CAPTURE CHANGES 子句 (SQLSTATE 42613)。
  • Explain 表格無法以 CCSID UNICODE 建立 (SQLSTATE 55002)。
  • 建立的暫存表格及宣告的暫存表格無法以 CCSID UNICODE 建立 (SQLSTATE 56031)。
  • 無法在 CREATE SCHEMA 陳述式中建立 CCSID UNICODE 表格 (SQLSTATE 53090)。
  • 載入作業的異常狀況表格必須與作業的目標表格具有相同的 CCSID (SQLSTATE 428A5)。
  • SET INTEGRITY 陳述式的異常狀況表格必須具有與陳述式目標表格相同的 CCSID (SQLSTATE 53090)。
  • 事件監視器資料的目標表格不得宣告為 CCSID UNICODE (SQLSTATE 55049)。
  • SQL 陳述式一律以資料庫字碼頁解譯。 特別是,這表示文字、十六進位文字及定界 ID 中的每一個字元都必須在資料庫字碼頁中具有表示法;否則,該字元將取代為替代字元。

無論所呼叫 SQL 陳述式中任何表格的 CCSID 為何,應用程式中的主機變數一律使用在應用程式字碼頁中。 資料庫管理程式將視需要執行字碼頁轉換,以在應用程式字碼頁與區段字碼頁之間轉換資料。 可以在用戶端設定登錄變數 DB2CODEPAGE,以變更應用程式字碼頁。

SECURITY POLICY
命名要與表格相關聯的安全原則。
policy-name
識別現行伺服器上已存在的安全原則 (SQLSTATE 42704)。 此子句本身不會啟動列或直欄保護。 如需相關資訊,請參閱 使用 LBAC 保護資料
OPTIONS (table-option-name string-constant, ...)
表格選項用來識別遠端基本表格。 table-option-name 是選項的名稱。 string-constant 指定表格選項的設定。 string-constant 必須以單引號括住。

遠端伺服器(在 CREATE SERVER 陳述式中指定的伺服器名稱)必須在 OPTIONS 子句中指定。 OPTIONS 子句也可以用來置換所建立之遠端基本表格的綱目或不完整名稱。

建議指定綱目名稱。 如果未指定遠端綱目名稱,則會使用表格名稱的限定元。 如果表格名稱沒有限定元,則會使用陳述式的授權 ID。

如果未指定遠端基本表格的不完整名稱,則會使用 table-name

規則

  • 直欄的位元組計數總和 (包括所有結構化或 XML 類型直欄的行內長度) 不得大於基於表格空間分頁大小的列大小限制 (SQLSTATE 54010)。 如需相關資訊,請參閱位元組計數。 對於類型化表格,位元組計數會套用至表格階層的根表格直欄,以及表格階層中每個子表格所建立的每個額外直欄(針對位元組計數目的,額外子表格直欄必須視為可為空值,即使定義為不可為空值)。 另外還有 4 個位元組的額外負擔,用來識別每一列所屬於的子表格。
  • 表格中的直欄數目不能超過 1,012 (SQLSTATE 54011)。 對於類型化表格,表格階層中所有子表格類型的屬性總數不能超過 1010。 對於使用隨機產生方法的隨機分佈表格,由於包含 RANDOM_DISTRIBUTION_KEY 直欄,因此直欄數不能超過 1,011。
  • 無法更新類型化表格的物件 ID 直欄 (SQLSTATE 42808)。
  • 表格上定義的任何強制唯一或主要索引鍵限制必須是配送索引鍵的超集 (SQLSTATE 42997)。
  • 下列規則僅適用於多個資料庫分割區資料庫。
    • 只能在單一分割區資料庫分割區群組上定義的表格空間中建立表格,這些表格僅由類型為 LOB、XML、基於其中一種類型的特殊類型或結構化類型的直欄所組成。
    • 無法變更在多個分割區資料庫分割區群組上定義的表格空間中表格的配送索引鍵定義。
    • 類型化表格的配送索引鍵直欄必須是 OID 直欄。
    • 不支援已分割的暫置表格。
  • 對於在 Db2 pureScale 環境中執行的資料庫,無法指定 ORGANIZE BY 子句 (SQLSTATE 42997)。
  • 下列限制適用於 range-clustered 表格:
    • Db2 pureScale 環境 中無法指定範圍叢集表格 (SQLSTATE 42997)。
    • 無法建立叢集作業索引。
    • 不支援變更表格以新增直欄。
    • 不支援變更表格以變更直欄的資料類型。
    • 不支援變更表格以變更 PCTFREE。
    • 不支援變更表格以設定 APPEND ON。
    • 無法使用 DETAILED 統計資料。
    • 載入公用程式無法用來移入表格。
    • 直欄不能是 XML 類型。
    • 無法建立為隨機配送表。
  • 下列限制適用於隨機配送表:
    • 無法定義為類型化表格
    • 無法定義為 range-clustered 表格
    • 無法定義為 materialized-query-table
    • 無法定義為暫置表格
    • 對於使用「隨機依據」產生方法的隨機配送表(這在沒有唯一或主要索引鍵的情況下建立隨機配送表時發生),下列其他限制適用:
      • 大量檢查限制項時(例如在載入作業期間或執行 SET INTEGRITY 陳述式期間),無法用作異常狀況表格
      • 無法用作解譯表格
  • 除非表格有相關聯的安全原則,且它包括 DB2SECURITYLABEL 類型的直欄或以 SECURED WITH 子句定義的直欄,否則表格不受保護。 前者指出表格是具有列層次精度的受保護表格,而後者指出表格是具有直欄層次精度的受保護表格。
  • 如果表格沒有相關聯的安全原則,則宣告 DB2SECURITYLABEL 類型的直欄會失敗 (SQLSTATE 55064)
  • 安全原則無法新增至類型化表格 (SQLSTATE 428DH)、具體化查詢表格或暫置表格 (SQLSTATE 428FG)。
  • materialized-query-definition 的全選中無法指定容錯 nested-table-expression (SQLSTATE 428GG)。
  • 當建立具體化查詢表格及它所依賴的任何基本表格時,會受到標籤型存取控制的保護,下列規則適用:
    • 列層次安全
      • 具體化查詢表格的全選中只有一個表格可以具有直欄類型 DB2SECURITYLABEL (SQLSTATE 428FG)。
      • 列安全標籤直欄必須選取並參照為具體化查詢表格定義最外層 SELECT 清單中的獨立式直欄 (SQLSTATE 428FG)。 具體化查詢表格中的對應直欄將標示為列安全標籤直欄。
    • 直欄層次安全
      • 如果具體化查詢表格定義中涉及的表格具有受安全標籤保護的直欄,且該直欄出現在具體化查詢表格定義中,則具體化查詢表格中的對應直欄會繼承該直欄的安全標籤。 如需更多詳細資料,請參閱本主題中的範例。
    • 當建立的具體化查詢表格相依於一或多個受標籤型存取控制保護的表格時,所有基本表格必須具有相同的安全原則物件(SQLSTATE、428FG)。 具體化查詢表格會自動受到該安全原則物件的保護。
    • 與具體化查詢表格直欄相關聯的安全標籤會計算為一個以上安全標籤的聚集。 此聚集由安全標籤組成,這些安全標籤與參與該具體化查詢表格直欄定義的基本表格直欄相關聯。 聚集還包含與出現在具體化查詢表格定義其他部分(例如 WHEREORDER BYHAVING 子句)中的任何基本表格直欄相關聯的安全標籤。 ALTER SECURITY POLICY 包含如何聚集兩個 SECURITY 標籤的說明。 如需更多詳細資料,請參閱本主題中的範例。
    • 為受標籤型存取控制保護的具體化查詢表格建立暫置表格時,該暫置表格會像具體化查詢表格一樣提供自動保護。 如需更多詳細資料,請參閱本主題中的範例。
    • 即會施行標籤型存取控制,以直接存取具體化查詢表格,就像對一般表格施行標籤型存取控制一樣。 從這個角度來看,沒有差異。 當 SQL 編譯器透過具體化查詢表格來處理查詢時,具體化查詢表格本身所定義的標籤型存取控制不需要強制執行。 SQL 編譯器會使用具體化查詢表格,該表格會從適當的基本表格中產生標籤型存取控制規則的因素。
  • 無法在 materialized-query-definitionfull-select 中指定 isolation-clause (SQLSTATE 42601)。
  • 包含 lock-request-clause 的 subselect 陳述式不適用於 MQT 遞送。
  • 國家字元資料類型只能在 MBCS 資料庫中指定 (SQLSTATE 560AA)。
  • 下列限制適用於插入時間叢集 (ITC) 表格:
    • SMS 表格空間不支援 ITC 表格 (SQLSTATE 42838)。
    • 在 SMS 表格空間中不支援在 ITC 表格上定義的索引 (SQLSTATE 42838)。

附註

  • 如果陳述式的授權 ID 具有 IMPLICIT_SCHEMA 權限,則建立綱目名稱不存在的表格會導致隱含建立該綱目。 綱目擁有者是 SYSIBM。 已將綱目上的 CREATEin 專用權授與 PUBLIC。
  • 如果指定外部索引鍵:
    • 在母項表格上具有刪除用法的所有套件都會失效。
    • 在母項索引鍵中至少一個直欄上具有更新用法的所有套件都會失效。
  • 建立子表格會導致相依於表格階層中任何表格的所有套件都 會失效。
  • 使用 NO ACTION 或 RESTRICT 作為參照限制的刪除或更新規則,會決定何時施行限制項:
    RESTRICT
    在所有其他限制項之前施行刪除或更新規則,包括那些具有修改規則(例如 CASCADE 或 SET NULL)的參照限制。
    不需任何動作
    在其他參照限制項之後施行刪除或更新規則。
    不同行為顯而易見的範例包括從定義為 UNION ALL 相關表格的視圖中刪除列。
       Table T1 is a parent of table T3; delete rule as noted below. 
       Table T2 is a parent of table T3; delete rule CASCADE.
       
       CREATE VIEW V1 AS SELECT * FROM T1 UNION ALL SELECT * FROM T2
    
       DELETE FROM V1
    如果表格 T1 是表格 T3 的母項:
    • 如果刪除規則為 RESTRICT,且 t3 包含 T1 母項索引鍵的任何子列,則會引發限制違規 (SQLSTATE 23001)。
    • 如果刪除規則為 NO ACTION,則在針對從 T1 中刪除的項目施行 NO ACTION 刪除規則之前,從 T2 中刪除列時,CASCADE 的刪除規則可能會刪除子列。 如果從 T2 刪除未導致刪除 T3 中 T1 母項索引鍵的所有子列,則會引發限制違規 (SQLSTATE 23504)。
    請注意,根據刪除或更新規則是 RESTRICT 還是 NO ACTION,傳回的 SQLSTATE 有所不同。
  • 對於在多個分割區資料庫分割區群組上定義的表格空間中的表格,選擇配送索引鍵時請考量表格並置:
    • 表格必須位於並置的相同資料庫分割區群組中。 表格空間可以不同,但必須定義在相同的資料庫分割區群組中。
    • 表格的配送索引鍵必須具有相同數目的直欄,且對應的索引鍵直欄必須與資料庫分割區相容,才能進行並置。
    • 選擇配送索引鍵也會影響結合的效能。 如果表格經常與另一個表格結合,請將結合直欄視為兩個表格的配送索引鍵。
  • 如果需要使用替代來源(另一個表格或檔案)中的資料來建立大型結果集,且不需要回復表格,則 NOT LOGGED INITIALLY 選項非常有用。 使用此選項將會節省記載資料的額外負擔。 當指定此選項時,下列考量適用:
    • 確定工作單位時,會將工作單位期間對表格所做的所有變更清除至磁碟。
    • 當您執行向前復原公用程式且發現日誌記錄指出資料庫中的表格已由「載入」公用程式移入或使用 NOT LOGGED INITIALLY 選項建立時,該表格將標示為無法使用。 如果稍後發現 DROP TABLE 日誌,向前復原公用程式將捨棄該表格。 否則,在回復資料庫之後,如果嘗試存取表格,則會發出錯誤 (SQLSTATE 55019)。 唯一允許的作業是捨棄表格。
    • 一旦將這類表格備份為資料庫或表格空間備份的一部分,就可以回復表格。
  • 使用具體化查詢表格來最佳化查詢處理:各種類型的具體化查詢表格會使用不同的控制項來最佳化查詢的處理。
    • 如果下列每一個條件都為 true,則可以使用以 ENABLE QUERY OPTIMIZATION 定義的 REFRESH DEFERRED 具體化查詢表格來最佳化查詢處理:
      • CURRENT REFRESH AGE 設為 ANY。
      • 已設定 CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION,使其包括具體化查詢表格類型。
      • CURRENT QUERY OPTIMIZATION 設為 2 或者大於或等於 5 的值。
      附註: CURRENT REFRESH AGE 不會影響對 MAINTAINED BY FEDERATED_TOOL 具體化查詢表格的查詢遞送。
    • 如果下列每一個條件條件都為 true,則使用 ENABLE QUERY OPTIMIZATION 定義的備用表格可以根據抄寫延遲臨界值來最佳化查詢處理:
      • CURRENT REFRESH AGE 設為零或 ANY 以外的持續時間。
      • CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION 設為僅包含 REPLICATION 或 ALL。
      • CURRENT QUERY OPTIMIZATION 設為 2 或者大於或等於 5 的值。
      如需可指定之非零持續時間值的說明,請參閱 SET CURRENT REFRESH AGE 陳述式
    • 如果 CURRENT QUERY OPTIMIZATION 設為 2 或大於或等於 5 的值,則一律會考量使用 ENABLE QUERY OPTIMIZATION 定義的 REFRESH IMMEDIATE 具體化查詢表格進行最佳化。
    • 若要讓此最佳化能夠使用 REFRESH DEFERRED 抄寫未維護的具體化查詢表格 或 REFRESH IMMEDIATE 具體化查詢表格,除了已說明的規則之外,全選還必須符合某些規則:
      • 全選不得包含任何特別暫存器或內建函數,視特別暫存器的值而定
      • 全選不得包含任何廣域變數。
      • 全選不得包含非唯一性的函數。
      如果建立具體化查詢表格時指定的查詢不符合這些規則,則會傳回警告 (SQLSTATE 01633)。
  • 如果使用 REFRESH IMMEDIATE 定義具體化查詢表格,或使用 PROPAGATE IMMEDIATE 定義暫置表格,則嘗試在基礎表格上套用插入、更新或刪除作業所產生的變更時,可能會發生錯誤。 此錯誤將導致基礎表格上的插入、更新或刪除作業失敗。
  • 大量檢查限制(例如在載入作業期間或執行 SET INTEGRITY 陳述式期間)時,無法將具體化查詢表格或暫置表格用作異常狀況表格。
  • 使用 REFRESH IMMEDIATE 或使用 REFRESH DEFERRED 與相關聯暫置表格一起定義的具體化查詢表格所參照的表格無法執行某些作業:
    • 無法使用 IMPORT REPLACE。
    • 無法完成 ALTER TABLE NOT LOGGED INITIALLY WITH EMPTY TABLE。
  • 在聯合系統中,關聯式資料來源或本端表格的暱稱可以用作基礎表格,以建立具體化查詢表格。 不支援非關聯式資料來源的暱稱。 當暱稱是其中一個基礎表格時,必須使用 REFRESH DEFERRED 選項。 在分割的資料庫環境中不支援參照暱稱的 system-maintained 具體化查詢表格。
  • transaction-start-ID 直欄的考量:如果直欄容許空值,則 transaction-start-ID 直欄包含空值,並且有 row-begin 直欄,且該直欄的值與針對其他交易產生的 row-begin 直欄的值相比是唯一的。 因為直欄可能包含空值,建議您在從直欄擷取值時使用下列其中一種方法:
    COALESCE ( transaction_start_id_col,  row_begin_col)
     
    CASE WHEN transaction_start_id_col IS NOT NULL
              THEN transaction_start_id_col 
         ELSE row_begin_col END
  • 定義系統期間時間表格:系統期間時間表格定義包括下列項目:
    • 名為 SYSTEM_TIME 的系統期間,使用 row-begin 直欄及 row-end 直欄來定義。 請參閱 AS ROW BEGIN、AS ROW END 及 PERIOD-DEFINITION 的說明。
    • transaction-start-ID 直欄。 請參閱 AS TRANSACTION START ID 的說明。
    • 在後續 ALTER TABLE 陳述式上指定且指定 ADD VERSIONING 動作的系統期間資料版本化定義,其中包括相關聯歷程表的名稱。 請參閱 ALTER TABLE 下 ADD VERSIONING 子句的說明。
    若要確保在捨棄系統期間時間表格時無法隱含地捨棄歷程表,請在歷程表的定義中使用 WITH RESTRICT ON DROP 子句。 只有在 ALTER TABLE 陳述式移除 RESTRICT ON DROP 屬性時,才能手動捨棄歷程表。
  • 定義 application-period 時間表格:application-period 時間表格定義包括名為 BUSINESS_TIME 的應用程式期間。 應用程式期間是使用開始時間戳記直欄及結束直欄來定義。 請參閱 period-definition 的說明。

    當列更新或刪除時,application-period 時間表格上的資料變更作業可能會導致自動插入一或兩個額外列。 針對 application-period 時間表格中由該列所代表的期間部分指定更新或刪除列時,會更新或刪除該列,並自動插入一或兩列以代表未變更的列部分。 針對由於表格上的更新或刪除作業而自動插入的每一列,會為 application-period 時間表格中每一個產生的直欄產生新值。 如果產生的直欄定義為唯一或主要索引鍵、參照限制項中的母項索引鍵或唯一索引的一部分,則自動插入可能會違反限制項或索引,在此情況下會傳回錯誤。

  • 隱含地隱藏直欄的考量:建立具有隱式隱藏直欄的表格可能會影響使用表格的資料移動公用程式的行為。 當表格包含隱含地隱藏的直欄時,IMPORT、INGEST 及 LOAD 等公用程式需要您指定是否在作業中包括隱藏直欄的資料。 例如,這可能表示載入作業針對沒有任何隱藏直欄的表格順利執行,但在針對包含隱含隱藏直欄的表格執行時失敗 (SQLCODE SQL2437N)。 同樣地,EXPORT 需要您指定是否將隱藏直欄的資料併入作業中。

    當使用包含隱含地隱藏直欄的表格時,資料移動公用程式必須使用 DB2_DMU_DEFAULT 登錄變數、implicitlyhiddenincludeimplicitlyhiddenmissing 檔案類型修飾元。

  • 透通 DDL: 在聯合系統中,可以使用 Db2 SQL 來建立、變更或捨棄遠端基本表格。 此功能稱為透通 DDL。 可以在資料來源上建立遠端基本表格之前,必須先配置聯合伺服器來存取該資料來源。 此配置包括建立資料來源的封套、為遠端基本表格將位於的伺服器提供伺服器定義,以及在聯合伺服器與資料來源之間建立使用者對映。
    透通 DDL 會對 CREATE TABLE 陳述式中可以包含的內容施加一些限制:
    • 只能在遠端基本表格上建立直欄及主要索引鍵。
    • 透通 DDL 支援的特定子句包括:
      • element-list 子句中的 column-definitionunique-constraint
      • column-options 子句中的 NOT NULL 及 PRIMARY KEY
      • 選項
    • 遠端資料來源必須支援:
      • 資料庫直欄資料類型所對映的遠端直欄資料類型
      • CREATE TABLE 陳述式中的主要索引鍵選項
      視資料來源對其不支援之要求的回應方式而定,可能會傳回錯誤或忽略要求。

    使用透通 DDL 建立遠端基本表格時,會自動為該遠端基本表格建立暱稱。

  • 參照限制可以定義為母項表格或相依表格是表格階層的一部分。 在這種情況下,參照限制的效果取決於陳述式類型:
    1. 對於 INSERT、UPDATE 或 DELETE 陳述式,限制可確保對於具有非空值外部索引鍵的相依表格(或其任何子表格)的每一列,母項表格(或其子表格之一)中存在具有相符母項索引鍵的列。 無論該動作如何起始,都會對影響任一表格之列的任何動作施行此規則。
    2. 若為 DROP TABLE 陳述式:
      • 如果捨棄的表格是母項表格或相依表格,則會捨棄限制項。
      • 如果已捨棄表格的超表格是母項表格,則會將已捨棄表格的列視為已從超表格中刪除。 即會檢查參照限制項,並針對每一個已刪除的列呼叫其刪除規則。
      • 如果已捨棄表格的超表格是相依表格,則不會檢查限制項。 從相依表格中刪除列不能導致違反參照限制。
  • 專用權:建立任何表格時,會將 CONTROL 專用權授與表格的定義者。 建立子表格時,會自動在子表格上授與每一個使用者或群組對立即超表格的 SELECT 專用權,並以表格定義者作為授與者。
  • 列大小限制: 橫列組織 表格之橫列所容許的位元組數上限,取決於建立表格之表格空間的分頁大小 (tablspace-name1)。 下表顯示與每一個表格空間頁面大小相關聯的列大小限制及欄數限制。
    表 3. 每一個表格空間頁面大小中直欄數及列大小的限制 (橫列組織 表格)
    頁面大小 列大小限制 直欄計數限制
    4K 4005 500
    8K 8101 1012
    16K 16,293 1012
    32K 32,677 1012
    下列公式可進一步限制 列組織 表格的實際欄數:
       Total Columns * 8 + Number of LOB Columns * 12 <=
         Row Size Limit for Page Size

    不論頁面大小, 直欄組織 表格最多可以有 1012 個直欄,其中直欄的位元組計數不得大於 32,677。

  • 位元組計數:下表包含依資料類型列出的直欄位元組計數。 這用來計算列大小。 位元組計數取決於 VALUE COMPRESSION 是否處於作用中。 當 VALUE COMPRESSION 不處於作用中時,位元組計數也取決於直欄是否可為空值。 未啟用列壓縮時,所顯示的位元組計數適用。 如果列壓縮處於作用中,則列所使用的位元組總數通常會小於列的未壓縮版本;它將永遠不會更大。

    如果表格是以結構化類型為基礎,則無論是否定義子表格,都會保留額外 4 個位元組的額外負擔來識別子表格的列。 為了位元組計數的目的,即使定義為不可為空值,也必須將其他子表格直欄視為可為空值。

    表 4. 依資料類型的直欄位元組計數
    資料類型 VALUE COMPRESSION 處於作用中1 VALUE COMPRESSION 未處於作用中
    直欄可為空值 直欄不可為空值
    SMALLINT 4 3 2
    INTEGER 6 5 4
    BIGINT 10 9 8
    REAL 6 5 4
    DOUBLE 10 9 8
    DECIMAL (p/2)+3 的整數部分,其中 p 是精準度 (p/2)+2 的整數部分,其中 p 是精準度 (p/2)+1 的整數部分,其中 p 是精準度
    DECFLOAT(16) 10 9 8
    DECFLOAT(34) 18 17 16
    CHAR(n) n+ 2 n+ 1 n
    VARCHAR(n) n+ 2 n+5(在表格內) n+4(在表格內)
    LONG VARCHAR2 22 25 24
    二進位 n+ 2 n+ 1 n
    VARBINARY n+ 2 n+5(在表格內) n+4(在表格內)
    GRAPHIC(n) n* 2 + 2 n* 2 + 1 n* 2
    VARGRAPHIC(n) n* 2 + 2 n*2+5(在表格內) n*2+4(在表格內)
    長 VARGRAPHIC2 22 25 24
    日期 6 5 4
    TIME 5 4 3
    TIMESTAMP(p) p+1)/2+9 的整數部分,其中 p 是小數秒的精準度 (p+1)/2+8 的整數部分,其中 p 是小數秒的精準度 (p+1)/2+7 的整數部分,其中 p 是小數秒的精準度
    BOOLEAN 3 2 1
    XML(未指定 INLINE LENGTH) 82 85 84
    XML(已指定 INLINE LENGTH) INLINE LENGTH +2 INLINE LENGTH +4 INLINE LENGTH +3
    LOB3 長度上限 1024 (未指定 INLINE LENGTH) 70 73 72
    LOB 長度上限 8192(未指定 INLINE LENGTH) 94 97 96
    LOB 長度上限 65,536 (未指定 INLINE LENGTH) 118 121 120
    LOB 長度上限 524,000(未指定 INLINE LENGTH) 142 145 144
    LOB 長度上限 4,190,000(未指定 INLINE LENGTH) 166 169 168
    LOB 長度上限 134,000,000 (未指定 INLINE LENGTH) 198 201 次 200
    LOB 長度上限 536,000,000(未指定 INLINE LENGTH) 222 225 224
    LOB 長度上限 1,070,000,000(未指定 INLINE LENGTH) 254 257 256
    LOB 長度上限 1,470,000,000(未指定 INLINE LENGTH) 278 281 280
    LOB 長度上限 2,147,483,647(未指定 INLINE LENGTH) 314 317 316
    指定 INLINE LENGTH 的 LOB INLINE LENGTH + 2 INLINE LENGTH + 5 INLINE LENGTH + 4

    1 當 VALUE COMPRESSION 對該列處於作用中時,每一列都會使用額外 2 個位元組的儲存體。

    2 LONG VARCHAR 及 LONG VARGRAPHIC 資料類型已淘汰,並可能在未來版本中移除。

    3 每一個 LOB 值在基本記錄中都有一個 LOB 描述子,指向實際值的位置。 描述子的大小會根據為直欄定義的長度上限而改變。 未指定 LOB 直欄的 INLINE LENGTH 時,會使用描述子的大小作為預設行內長度值。

    在決定 LOB 直欄的位元組計數時,如果 LOB 直欄是系統暫存表格的一部分,而系統暫存表格可能針對不敏感游標、可捲動的游標及其他需要暫時空間或資料排序的查詢產生,則需要考量額外的位元組數。 視特定查詢而定,所需要的額外位元組數目可能高達 70 個位元組。 如果基本表格接近分頁大小的列長度上限,當處理查詢時,如果系統暫存表格無法容納最大可用的系統暫存表格空間,則可能會傳回錯誤。 如果現有的系統暫存表格空間具有 32K 分頁大小,則會儘可能使用延伸列大小支援。

    對於特殊類型,位元組計數等於特殊類型之來源類型的長度。 對於參照類型,位元組計數相當於參照類型所根據之內建資料類型的長度。 若為結構化類型,位元組計數相當於 INLINE LENGTH + 4。 INLINE LENGTH 是針對 column-options 子句中的直欄指定(或隱含計算)的值。

    下列範例表格的列大小假設未指定 VALUE COMPRESSION:
    DEPARTMENT 63 (0 + 3 + 33 + 7 +  3 + 17)
    ORG        57 (0 + 3 + 19 + 2 + 15 + 18)
    如果指定 VALUE COMPRESSION,則列大小會變更為:
    DEPARTMENT 69 (2 + 5 + 31 + 8 +  5 + 18)
    ORG        53 (2 + 4 + 16 + 4 + 12 + 15)
    具有延伸列大小之表格的頁面大小需求下限:在具有延伸列大小支援的表格中插入或更新資料列時,如果實體資料列長度超出表格空間的記錄長度上限,則可變長度字串直欄(VARCHAR 或 VARGRAPHIC)的子集會儲存為資料列外部的大型物件 (LOB) 資料。 基本列中的表格直欄會取代為大小為 24 個位元組的描述子。 為了適應所有 VARCHAR 或 VARGRAPHIC 資料都儲存在資料列外部的極端情況,資料庫管理程式會使用下列方法來計算列大小下限:
    • 處理每個 VARCHAR(n) 直欄,其中 n> 24 就像它是 VARCHAR(24) 一樣
    • 處理每個 VARGRAPHIC(m) 直欄,其中 m > 12 就像它是 VARGRAPHIC(12) 一樣
    該值是使用依資料類型的直欄位元組計數表格來計算。 然後會使用計算結果來尋找頁面大小的下限,其中可以建立具有延伸列大小的表格。
  • 儲存體位元組計數:下表依資料值的資料類型說明直欄的儲存體位元組計數。

    第一個表格定義屬性集。 第二個表格會參照那些屬性,其中包含每一種資料類型的位元組計數詳細資料。

    位元組計數取決於 VALUE COMPRESSION 是否處於作用中。 當 VALUE COMPRESSION 不處於作用中時,位元組計數也取決於直欄是否可為空值。 表格中的值代表用來儲存值的儲存體量 (以位元組為單位)。 未啟用列壓縮時,所顯示的位元組計數適用。 如果列壓縮處於作用中,則列所使用的位元組總數通常會小於列的未壓縮版本;它將永遠不會更大。

    表 5. 相關表格中所參照準則的定義
    案例 資料值 VALUE COMPRESSION 直欄可空值性
    A 空值 非作用中 可為空值
    B 空值 作用中 2 可為空值
    C Zero-length 作用中 2
    D 系統預設值1 作用中 2
    E 所有其他資料值 非作用中 可為空值
    F 所有其他資料值 非作用中 不可為空值
    G 所有其他資料值 作用中 2

    1 當針對直欄指定 COMPRESS SYSTEM DEFAULT 時。

    2 當 VALUE COMPRESSION 對該列處於作用中狀態時,每一列會使用額外 2 個位元組的儲存體。

    表 6. 基於列格式、資料類型及資料值的儲存體位元組計數
    資料類型 案例 A 案例 B 案例 C 案例 D 案例 E 案例 F 案例 G
    SMALLINT 3 3 - 3 3 2 4
    INTEGER 5 3 - 3 5 4 6
    BIGINT 9 3 - 3 9 8 10
    REAL 5 3 - 3 5 4 6
    DOUBLE 9 3 - 3 9 8 10
    DECIMAL (p/2)+2 的整數部分,其中 p 是精準度 3 - 3 (p/2)+2 的整數部分,其中 p 是精準度 (p/2)+1 的整數部分,其中 p 是精準度 (p/2)+3 的整數部分,其中 p 是精準度
    DECFLOAT(16) 9 - 9 8 10
    DECFLOAT(34) 17 - 17 16 18
    CHAR(n) n+ 1 3 - 3 n+ 1 n n+ 2
    VARCHAR(n) 5 3 2 2 N+5,其中 N 是資料中的位元組數目 N+4,其中 N 是資料中的位元組數目 N+2,其中 N 是資料中的位元組數目
    LONG VARCHAR2 5 3 2 2 25 24 22
    二進位 n+ 1 3 - 3 n+ 1 n n+ 2
    VARBINARY 5 3 2 2 N+5,其中 N 是資料中的位元組數目 N+4,其中 N 是資料中的位元組數目 N+2,其中 N 是資料中的位元組數目
    GRAPHIC(n) n* 2 + 1 3 - 3 n* 2 + 1 n* 2 n* 2 + 2
    VARGRAPHIC(n) 5 3 2 2 N*2+5,其中 N 是資料中的位元組數目 N*2+4,其中 N 是資料中的位元組數目 N*2+2,其中 N 是資料中的位元組數目
    長 VARGRAPHIC2 5 3 2 2 25 24 22
    日期 5 3 - - 5 4 6
    TIME 4 3 - - 4 3 5
    TIMESTAMP(p) (p+1)/2+8 的整數部分,其中 p 是小數秒的精準度 3 - - (p+1)/2+8 的整數部分,其中 p 是小數秒的精準度 (p+1)/2+7 的整數部分,其中 p 是小數秒的精準度 p+1)/2+9 的整數部分,其中 p 是小數秒的精準度
    BOOLEAN 2 2 - 2 2 1 3
    LOB1 長度上限 1024 5 3 2 2 (60 至 68)+ 5 (60 至 68)+ 4 (60 至 68)+ 2
    LOB 長度上限 8192 5 3 2 2 (60 至 92)+ 5 (60 至 92)+ 4 (60 至 92)+ 2
    LOB 長度上限 65,536 5 3 2 2 (60 至 116)+ 5 (60 至 116)+ 4 (60 至 116)+ 2
    LOB 長度上限 524,000 5 3 2 2 (60 至 140)+ 5 (60 至 140)+ 4 (60 至 140)+ 2
    LOB 長度上限 4,190,000 5 3 2 2 (60 至 164)+ 5 (60 至 164)+ 4 (60 至 164)+ 2
    LOB 長度上限 134,000,000 5 3 2 2 (60 至 196)+ 5 (60 至 196)+ 4 (60 至 196)+ 2
    LOB 長度上限 536,000,000 5 3 2 2 (60 至 220)+ 5 (60 至 220)+ 4 (60 至 220)+ 2
    LOB 長度上限 1,070,000,000 5 3 2 2 (60 至 252)+ 5 (60 至 252)+ 4 (60 至 252)+ 2
    LOB 長度上限 1,470,000,000 5 3 2 2 (60 至 276)+ 5 (60 至 276)+ 4 (60 至 276)+ 2
    LOB 長度上限 2,147,483,647 5 3 2 2 (60 至 312)+ 5 (60 至 312)+ 4 (60 至 312)+ 2
    XML 5 3 - - 85 84 82

    1 當針對直欄指定 COMPRESS SYSTEM DEFAULT 時。

    2 LONG VARCHAR 及 LONG VARGRAPHIC 資料類型已淘汰,並可能在未來版本中移除。

  • 維度直欄:因為維度直欄的每一個不同值都指派給表格的不同區塊,所以可能需要表示式上的叢集作業,例如 INTEGER(ORDER_DATE)/100。 在此情況下,可以針對表格定義產生的直欄,然後可以在 ORGANIZE BY DIMENSIONS 子句中使用這個產生的直欄。 如果表示式對於表格的直欄是單調的,則資料庫可能會使用維度索引來滿足該直欄上的範圍述詞。 例如,如果表示式只是 column-name + some-positive-constant,則它是單調遞增。 使用者定義函數、某些內建函數,以及在表示式中使用多個直欄,可防止單調性或其偵測。

    包含所產生的直欄(其表示式為非單調或單調性無法判定)的維度仍可以建立,但不支援沿著這些維度的截塊或資料格界限的範圍查詢。 截塊或儲存格可以處理等式及 IN 述詞。

    如果下列項目在產生函數 fn 方面為 true,則產生的直欄是單調的:

    • 單調遞增。
      對於每個可能的值配對 x1 和 x2,如果 x2>x1,則為 fn(x2)>fn(x1)。 例如:
         SALARY - 10000
    • 單調遞減。
      對於每個可能的值配對 x1 與 x2,如果 x2>x1,則 fn(x2)<fn(x1)。 例如:
         -SALARY
    • 單調不遞減。
      對於每個可能的值配對 x1 和 x2,如果 x2>x1,則為 fn(x2)>=fn(x1)。 例如:
         SALARY/1000
    • 單調不增加。
      對於每個可能的值配對 x1 及 x2,如果 x2>x1,則 fn(x2)<=fn(x1)。 例如:
         -SALARY/1000

    表示式 PRICE*DISCOUNT 不是單調的,因為它涉及多個表格直欄。

  • range-clustered 表格:依索引鍵順序組織表格對特定類型的表格有效。 表格應該具有在可能值範圍內緊密叢集化(密集)的整數索引鍵。 此整數索引鍵的直欄不得為空值,且索引鍵在邏輯上應該是表格的主要索引鍵。 range-clustered 表格的組織會排除對個別唯一索引物件的需要,提供對指定索引鍵值列的直接存取,或指定索引鍵值範圍的列範圍。 已定義索引鍵順序範圍中完整列集的所有空間配置都是在建立表格期間完成,且在定義 range-clustered 表格時必須考量。 儲存體空間無法用於任何其他用途,即使列最初標示為已刪除。 如果完整索引鍵序列範圍只會在很長一段時間內移入資料,則此表格組織可能不適用。
  • 一個表格最多可以有一個安全原則。
  • 施行在受保護表格上定義的參照完整性限制項。 在此情況下,限制違規可能難以除錯,因為如果您沒有適當的安全標籤或豁免認證,資料庫管理程式將不容許您查看導致違規的列。
  • 在定義表格中的直欄順序時,應該將經常更新的直欄放置在定義尾端,以將針對更新項目記載的資料量減至最少。 這包括 ROW CHANGE TIMESTAMP 直欄。 ROW CHANGE TIMESTAMP 直欄保證在每一個列更新時更新。
  • 安全與抄寫:抄寫可能會導致在資料庫外部抄寫受保護表格中的資料列。 設定受保護表格的抄寫時必須小心,因為無法保護資料庫之外的資料。
  • 多重分割區或 Db2 pureScale 環境的考量:
    • 如果 CACHE 和 NO ORDER 選項有效,則多個快取可以同時作用。 這可能發生在多分割區 Db2 pureScale 環境中的每一個成員。 來自不同 成員 的下一個值指派要求可能不會導致以嚴格數值順序指派值。 例如,在多分割區 Db2 pureScale 環境中,假設 成員 DB1A 及 DB1B 使用相同的順序,而 DB1A 取得範圍 1-20 內的快取值,而 DB1B 取得範圍 21-40 內的快取值。 在此實務範例中,如果 DB1A 先要求下一個值,然後 DB1B 要求,然後 DB1A 再次要求,則指派的實際值順序會是 1,21,2。 因此,為了保證在多個 成員 之間以嚴格數值順序同時使用相同順序產生序號,請指定 ORDER 選項。
    • Db2 pureScale 環境中,使用 ORDER 或 NO CACHE 選項可確保指派給多個 成員 之間應用程式所共用之序列的值是嚴格的數值順序。 在 Db2 pureScale 環境中,如果指定 ORDER ,則即使指定 CACHE n ,也不隱含 CACHE。
  • 列及直欄存取控制 (RCAC) 的考量:不支援 ACTIVATE ROW ACCESS CONTROL、ACTIVATE COLUMN ACCESS CONTROL、DEACTIVATE ROW ACCESS CONTROL 及 DEACTIVATE COLUMN ACCESS CONTROL 子句。 使用 ALTER TABLE 陳述式來啟動或取消啟動表格上的列或直欄層次存取控制。
  • 僅在自動儲存體表格空間中 直欄組織 表格的考量: 建立 直欄組織 表格。
    直欄組織 表格不支援下列選項 (畫底線的選項是預設值)。 不過,可以針對 橫列組織 表格指定這些表格,這些表格將在與 直欄組織 表格相同的資料庫及工作量中使用。
    • ORGANIZE BY {DIMENSIONS | KEY SEQUENCE | INSERT TIME}
    • DATA CAPTURE CHANGES
    • VALUE COMPRESSION
    • COMPRESS YES [ADAPTIVE | STATIC]
    • COMPRESS NO
    • PARTITION BY RANGE
    • FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
    • CREATE TABLE OF <type-name1>(以建立類型化表格)
    • PROPAGATE IMMEDIATE
    • 檢查
    • DETERMINED BY

    不支援結構化類型直欄。

    直欄組織 表格的直欄必須具有下列其中一個資料類型:
    • SMALLINT
    • INTEGER
    • BIGINT
    • DECIMAL
    • REAL
    • DOUBLE
    • DECFLOAT
    • CHAR(包括 FOR BIT DATA)
    • VARCHAR(包括 FOR BIT DATA)
    • 二進位
    • VARBINARY
    • GRAPHIC
    • VARGRAPHIC
    • 日期
    • TIME
    • TIMESTAMP (n)
    • BOOLEAN
    • CLOB
    • BLOB
    • DBCLOB
    • NCLOB
    • 受支援資料類型的特殊類型

替代語法

下列替代方案是非標準的。 支援它們是為了與舊版產品或其他資料庫產品相容。
  • 接受下列語法作為預設行為:
    • IN database-name.tablespace-name
    • IN DATABASE database-name
    • 關於混合資料
    • 關於 SBCS 資料
  • 可以指定 PART 來取代 PARTITION。
  • 可以指定 PARTITION partition-number,而不是 PARTITION partition-namepartition-number 不得識別先前在 CREATE TABLE 陳述式中指定的分割區。 如果未指定 partition-number,則資料庫管理程式會產生唯一分割區號碼。
  • 可以指定 VALUES 來取代 ENDING AT。
  • CONSTRAINT 關鍵字可以從定義 references-clause 的 column-definition 中省略。
  • 可以在 FOREIGN KEY(不含 CONSTRAINT 關鍵字)之後指定 constraint-name
  • SUMMARY 可以選擇性地在 CREATE 之後指定。
  • 可以指定 DEFINITION ONLY 來取代 WITH NO DATA。
  • 可以指定 PARTITIONING KEY 來取代 DISTRIBUTE BY。
  • 在 DISTRIBUTE ON 後面接著 HASH 選項時,可以指定 DISTRIBUTE ON 來取代 DISTRIBUTE BY,但在後面接著 REPLICATION 選項時,不能指定 DISTRIBUTE ON。
  • 可以指定 REPLICATED,來取代 DISTRIBUTE BY REPLICATION
  • 可以使用逗點來區隔 identity-options 子句中的多個選項。
  • 可以分別指定 NOMINVALUE、NOMAXVALUE、NOCYCLE、NOCACHE 和 NOORDER,來取代 NO MINVALUE、NO MAXVALUE、NO CYCLE、NO CACHE 和 NO ORDER。
  • 可以在 table-option-name string-constant 之前指定 ADD
  • 當指定日期時間特別暫存器的值時,可以指定 NOW () 來取代 CURRENT_TIMESTAMP。

範例

  1. 在 DEPARTX 表格空間中建立表格 TDEPT。 DEPTNO、DEPTNAME、MGRNO 及 ADMRDEPT 是直欄名稱。 CHAR 表示直欄將包含字元資料。 NOT NULL 表示直欄不能包含空值。 VARCHAR 表示直欄將包含 varying-length 字元資料。 主要索引鍵是由直欄 DEPTNO 組成。
       CREATE TABLE TDEPT
         (DEPTNO   CHAR(3)     NOT NULL,
          DEPTNAME VARCHAR(36) NOT NULL,
          MGRNO    CHAR(6),
          ADMRDEPT CHAR(3)     NOT NULL,
          PRIMARY KEY(DEPTNO))
       IN DEPARTX
  2. 在 SCHED 表格空間中建立表格 PROJ。 PROJNO、PROJNAME、DEPTNO、RESPEMP、PRSTAFF、PRSTDATE、PRDATE 及 MAJPROJ 是直欄名稱。 CHAR 表示直欄將包含字元資料。 DECIMAL 表示直欄將包含聚集十進位資料。 5,2 表示下列項目:5 表示小數位數,2 表示小數點右邊的位數。 NOT NULL 表示直欄不能包含空值。 VARCHAR 表示直欄將包含 varying-length 字元資料。 DATE 表示直欄將包含三部分格式的日期資訊(年、月及日)。
       CREATE TABLE PROJ
         (PROJNO   CHAR(6)      NOT NULL,
          PROJNAME VARCHAR(24)  NOT NULL,
          DEPTNO   CHAR(3)      NOT NULL,
          RESPEMP  CHAR(6)      NOT NULL,
          PRSTAFF  DECIMAL(5,2)         ,
          PRSTDATE DATE                 ,
          PRENDATE DATE                 ,
          MAJPROJ  CHAR(6)      NOT NULL)
       IN SCHED
  3. 建立稱為 EMPLOYEE_SALARY 的表格,其中任何不明薪資都視為 0。 未指定表格空間,因此會根據 IN tablespace-name 子句說明的規則,在系統選取的表格空間中建立表格。
       CREATE TABLE EMPLOYEE_SALARY
         (DEPTNO   CHAR(3)      NOT NULL,
          DEPTNAME VARCHAR(36)  NOT NULL,
          EMPNO    CHAR(6)      NOT NULL,
          SALARY   DECIMAL(9,2) NOT NULL WITH DEFAULT)
  4. 建立薪資和英里總計的特殊類型,並將它們用於在預設表格空間中建立的表格直欄。 在動態 SQL 陳述式中,假設 CURRENT SCHEMA 特別暫存器是 JOHNDOE,且 CURRENT PATH 是預設值(SYSIBMSYSFUNJOHNDOE)。
    如果未指定 SALARY 的值,則必須設為 0;如果未指定 LIVING_DIST 的值,則必須設為 1 英里。
       CREATE TYPE JOHNDOE.T_SALARY AS INTEGER
    
       CREATE TYPE JOHNDOE.MILES  AS FLOAT
    
       CREATE TABLE EMPLOYEE
         (ID          INTEGER NOT NULL,
          NAME        CHAR (30),
          SALARY      T_SALARY NOT NULL WITH DEFAULT,
          LIVING_DIST MILES    DEFAULT MILES(1) )
  5. 建立影像和音訊的特殊類型,並將它們用於表格的直欄。 未指定任何表格空間,因此將根據針對 IN tablespace-name 子句所說明的規則,在系統選取的表格空間中建立表格。 假設 CURRENT PATH 是預設值。
       CREATE TYPE IMAGE AS BLOB (10M)
       
       CREATE TYPE AUDIO AS BLOB (1G)
    
       CREATE TABLE PERSON
         (SSN    INTEGER NOT NULL,
          NAME   CHAR (30),
          VOICE  AUDIO,
          PHOTO  IMAGE)
  6. 在 HUMRES 表格空間中建立表格 EMPLOYEE。 表格上定義的限制項如下:
    • 部門號碼的值必須在 10 到 100 的範圍內。
    • 員工的工作只能是銷售經理辦事員
    • 自 1986 年開始在該公司工作的所有僱員,必須為該公司賺取超過 40,500 美元。
    附註: 如果包含在核對限制中的直欄可為空值,則它們也可以是空值。
       CREATE TABLE EMPLOYEE
         (ID          SMALLINT NOT NULL,
          NAME        VARCHAR(9),
          DEPT        SMALLINT CHECK (DEPT BETWEEN 10 AND 100),
          JOB         CHAR(5) CHECK (JOB IN ('Sales','Mgr','Clerk')),
          HIREDATE    DATE,
          SALARY      DECIMAL(7,2),
          COMM        DECIMAL(7,2),
          PRIMARY KEY (ID),
          CONSTRAINT  YEARSAL CHECK (YEAR(HIREDATE) > 1986
            OR SALARY > 40500)
         )
         IN HUMRES
  7. 建立完全包含在 PAYROLL 表格空間中的表格。
       CREATE TABLE EMPLOYEE .....
         IN PAYROLL
  8. 建立表格,其資料部分位於 ACCOUNT_IDX 中,索引部分位於 ACCOUNT_IDX 中。
       CREATE TABLE SALARY.....
         IN ACCOUNTING INDEX IN ACCOUNT_IDX
  9. 以預設格式建立表格及日誌 SQL 變更。
       CREATE TABLE SALARY1 .....
       CREATE TABLE SALARY1 .....
         DATA CAPTURE NONE
  10. 以擴充格式建立表格及日誌 SQL 變更。
       CREATE TABLE SALARY2 .....
         DATA CAPTURE CHANGES
  11. 在 SCHED 表格空間中建立表格 EMP_ACT。 EMPNO、PROJNO、ACTNO、EMPTIME、EMSTDATE 及 EMENDATE 是直欄名稱。 表格上定義的限制項為:
    • 任何列中的直欄集值 EMPNO、PROJNO 及 ACTNO 必須是唯一的。
    • PROJNO 值必須符合 PROJECT 表格中 PROJNO 直欄的現有值,如果已刪除專案,則也應該刪除 EMP_ACT 中參照該專案的所有列。
       CREATE TABLE EMP_ACT
         (EMPNO       CHAR(6) NOT NULL,
          PROJNO      CHAR(6) NOT NULL,
          ACTNO       SMALLINT NOT NULL,
          EMPTIME     DECIMAL(5,2),
          EMSTDATE    DATE,
          EMENDATE    DATE,
          CONSTRAINT EMP_ACT_UNIQ UNIQUE (EMPNO,PROJNO,ACTNO),
          CONSTRAINT FK_ACT_PROJ FOREIGN KEY (PROJNO)
                                 REFERENCES PROJECT (PROJNO) ON DELETE CASCADE
         )
         IN SCHED
    即會在相同的綱目中自動建立稱為 EMP_ACT_UNIQ 的唯一索引,以施行唯一限制項。
  12. 建立一個表格,以儲存冰球名人堂著名進球的相關資訊。 該表格將列出進球的球員、被進球的門將、日期和說明的相關資訊。 說明直欄可為空值。
       CREATE TABLE HOCKEY_GOALS
         ( BY_PLAYER      VARCHAR(30)   NOT NULL,
           BY_TEAM        VARCHAR(30)   NOT NULL,
           AGAINST_PLAYER VARCHAR(30)   NOT NULL,
           AGAINST_TEAM   VARCHAR(30)   NOT NULL,
           DATE_OF_GOAL   DATE          NOT NULL,
           DESCRIPTION    CLOB(5000) )
  13. 假設 EMPLOYEE 表格需要異常狀況表格。 可以使用下列陳述式來建立一個。
       CREATE TABLE EXCEPTION_EMPLOYEE AS
         (SELECT EMPLOYEE.*,
           CURRENT TIMESTAMP AS TIMESTAMP,
           CAST ('' AS CLOB(32K)) AS MSG
         FROM EMPLOYEE
         ) WITH NO DATA
  14. 假設下列表格空間具有指出的屬性:
       TBSPACE            PAGESIZE    USER   USERAUTH
       ------------------ ----------- ------ --------
       DEPT4K                    4096 BOBBY  Y
       PUBLIC4K                  4096 PUBLIC Y
       DEPT8K                    8192 BOBBY  Y
       DEPT8K                    8192 RICK   Y
       PUBLIC8K                  8192 PUBLIC Y
    • 如果 RICK 建立下列表格,則會將它放置在表格空間 PUBLIC4K 中,因為位元組計數小於 4005;但是如果 Bobby 建立相同的表格,則會將它放置在表格空間 DEPT4K 中,因為 Bobby 由於明確授權而具有 USE 專用權:
         CREATE TABLE DOCUMENTS
           (SUMMARY    VARCHAR(1000),
            REPORT     VARCHAR(2000))
    • 如果 BOBBY 建立下列表格,則會將它放置在表格空間 DEPT8K 中,因為位元組計數大於 4005,並且由於明確授權,BOBBY 具有 USE 專用權。 然而,如果 Duncan 建立相同的表格,則會將它放置在表格空間 PUBLIC8K 中,因為 Duncan 沒有特定的專用權:
         CREATE TABLE CURRICULUM
           (SUMMARY    VARCHAR(1000),
            REPORT     VARCHAR(2000),
            EXERCISES  VARCHAR(1500))
  15. 建立具有以結構化類型 EMP 定義的 LEAD 直欄的表格。 為 LEAD 直欄指定 300 個位元組的 INLINE LENGTH,指出任何無法放入 300 個位元組內的 LEAD 實例都儲存在表格外部(與基本表格列分開,類似於處理 LOB 值的方式)。
       CREATE TABLE PROJECTS (PID INTEGER,
         LEAD EMP INLINE LENGTH 300,
         STARTDATE DATE,
                   ...)
  16. 建立具有名為 DEPTNO、DEPTNAME、MGRNO、ADMRDEPT 及 LOCATION 的五個直欄的表格 DEPT。 直欄 DEPT 定義為 IDENTITY 直欄,因此一律會為它產生值。 DEPT 直欄的值應該以 500 開頭,並且增量為 1。
       CREATE TABLE DEPT
         (DEPTNO     SMALLINT      NOT NULL
                        GENERATED ALWAYS AS IDENTITY
                          (START WITH 500, INCREMENT BY 1),
          DEPTNAME   VARCHAR(36)   NOT NULL,
          MGRNO      CHAR(6),
          ADMRDEPT   SMALLINT      NOT NULL,
          LOCATION   CHAR(30))
  17. 建立在 YEAR 直欄上配送且在 REGION 及 YEAR 直欄上具有維度的 SALES 表格。 資料將根據 YEAR 直欄的雜湊值在資料庫分割區之間配送。 在每一個資料庫分割區上,資料將根據那些資料庫分割區上 REGION 及 YEAR 直欄值的唯一組合來組織成延伸範圍。
       CREATE TABLE SALES
         (CUSTOMER   VARCHAR(80),
          REGION     CHAR(5),
          YEAR       INTEGER)
       DISTRIBUTE BY HASH (YEAR)
       ORGANIZE BY DIMENSIONS (REGION, YEAR)
  18. 建立 SALES 表格,其中包含從 PURCHASEDATE 直欄產生的 PURCHASEYEARMONTH 直欄。 使用表示式來建立與原始 PURCHASEDATE 直欄相關的單調直欄,因此適合用作維度。 表格會在 REGION 直欄上配送,並根據 PURCHASEYEARMONTH 直欄在每一個資料庫分割區內組織到延伸範圍;亦即,不同的區域會在不同的資料庫分割區上,而不同的採購月將屬於那些資料庫分割區內的不同資料格(或延伸範圍集)。
       CREATE TABLE SALES
         (CUSTOMER            VARCHAR(80),
          REGION              CHAR(5),
          PURCHASEDATE        DATE,
          PURCHASEYEARMONTH   INTEGER
                                 GENERATED ALWAYS AS (INTEGER(PURCHASEDATE)/100))
       DISTRIBUTE BY HASH (REGION)
       ORGANIZE BY DIMENSIONS (PURCHASEYEARMONTH)
  19. 使用 CUSTOMERNUMDIM 直欄來建立 CUSTOMER 表格,該直欄是從 CUSTOMERNUM 直欄產生。 使用表示式來建立與原始 CUSTOMERNUM 直欄相關的單調直欄,因此適合用作維度。 表格會根據 CUSTOMERNUMDIM 直欄組織成資料格,因此表格中每 50 個客戶會有不同的資料格。 如果在 CUSTOMERNUM 上建立唯一索引,則會以這樣的方式對客戶號碼進行叢集作業,即會在表格中的特定延伸範圍集中找到每一個 50 個值的集合。
       CREATE TABLE CUSTOMER
         (CUSTOMERNUM      INTEGER,
          CUSTOMERNAME     VARCHAR(80),
          ADDRESS          VARCHAR(200),
          CITY             VARCHAR(50),
          COUNTRY          VARCHAR(50),
          CODE             VARCHAR(15),
          CUSTOMERNUMDIM   INTEGER
                              GENERATED ALWAYS AS (CUSTOMERNUM/50))
       ORGANIZE BY DIMENSIONS (CUSTOMERNUMDIM)
  20. 在 Oracle 伺服器 ORASERVER 上建立遠端基本表格 EMPLOYEE。 也會自動建立暱稱 EMPLOYEE(參照這個新建立的遠端基本表格)。
       CREATE TABLE EMPLOYEE
         (EMP_NO       CHAR(6)       NOT NULL,
          FIRST_NAME   VARCHAR(12)   NOT NULL,
          MID_INT      CHAR(1)       NOT NULL,
          LAST_NAME    VARCHAR(15)   NOT NULL,
          HIRE_DATE    DATE,
          JOB          CHAR(8),
          SALARY       DECIMAL(9,2),
          PRIMARY KEY (EMP_NO))
       OPTIONS
         (REMOTE_SERVER 'ORASERVER',
          REMOTE_SCHEMA 'J15USER1',
          REMOTE_TABNAME 'EMPLOYEE')

    下列 CREATE TABLE 陳述式顯示如何指定表格名稱或表格名稱及明確遠端基本表格名稱,以取得必要大小寫。 小寫 ID employee 用來說明 ID 的隱含摺疊。

    在 Informix® 伺服器上建立稱為 EMPLOYEE (大寫字元) 的遠端基本表格,並在該表格上建立暱稱 EMPLOYEE (大寫字元):
       CREATE TABLE employee
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER')
    如果未指定 REMOTE_TABNAME 選項,且未定界 table-name,則遠端基本表格名稱將是大寫字元,即使遠端資料來源通常以小寫字元來儲存名稱也一樣。
    在 Informix 伺服器上建立稱為 employee (小寫字元) 的遠端基本表格,並在該表格上建立名為 EMPLOYEE (大寫字元) 的暱稱:
       CREATE TABLE employee
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER',
          REMOTE_TABNAME 'employee')
    在支援定界 ID 的遠端資料來源上建立表格時,請使用 REMOTE_TABNAME 選項及字串常數,在必要情況下指定表格名稱。
    在 Informix 伺服器上建立稱為 employee (小寫字元) 的遠端基本表格,並在該表格上建立名為 employee (小寫字元) 的暱稱:
       CREATE TABLE "employee"
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER')
    如果未指定 REMOTE_TABNAME 選項,且已定界 table-name,則遠端基本表格名稱將與 table-name 相同。
  21. 建立可用來使用學生 ID 尋找學生的 range-clustered 表格。 針對每一筆學生記錄,包括學校 ID、課程 ID、學生號碼、學生 ID、學生名字、學生姓氏及學生成績分數平均值 (GPA)。
       CREATE TABLE STUDENTS
         (SCHOOL_ID     INTEGER   NOT NULL,
          PROGRAM_ID    INTEGER   NOT NULL,
          STUDENT_NUM   INTEGER   NOT NULL,
          STUDENT_ID    INTEGER   NOT NULL,
          FIRST_NAME    CHAR(30),
          LAST_NAME     CHAR(30),
          GPA           DOUBLE)
       ORGANIZE BY KEY SEQUENCE
         (STUDENT_ID
           STARTING FROM 1
           ENDING AT 1000000)
         DISALLOW OVERFLOW
    每筆記錄的大小是直欄加上對齊方式的總和,再加上 range-clustered 表格列標頭。 在此情況下,列大小為 98 個位元組:4 + 4 + 4 + 4 + 30 + 30 + 8 + 3(適用於可為空值的直欄)+ 1(適用於對齊方式)+ 10(適用於標頭)。 使用 4 KB 頁面大小(或 4096 個位元組),在計入頁面額外負擔之後,有 4038 個位元組可用,每頁有足夠的空間可容納 41 筆記錄。 允許 100 萬筆學生記錄,需要(100 萬除以每頁 41 筆記錄)24391 頁。 使用表格額外負擔的兩個額外頁面,建立表格時所配置的最終 4-KB 頁面數目為 24,393 頁。
  22. 建立名為 DEPARTMENT 的表格,其功能相依關係沒有指定的限制項名稱。
       CREATE TABLE DEPARTMENT
         (DEPTNO     SMALLINT      NOT NULL,
          DEPTNAME   VARCHAR(36)   NOT NULL,
          MGRNO      CHAR(6),
          ADMRDEPT   SMALLINT      NOT NULL,
          LOCATION   CHAR(30),
         CHECK (DEPTNAME DETERMINED BY DEPTNO) NOT ENFORCED)
  23. 建立具有受保護列的表格。
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE DB2SECURITYLABEL,
          POINTS      INTEGER,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  24. 建立具有受保護直欄的表格。
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE CHAR(8),
          POINTS      INTEGER COLUMN SECURED WITH CLUBPOSITION,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  25. 建立具有受保護列及直欄的表格。
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE DB2SECURITYLABEL,
          POINTS      INTEGER COLUMN SECURED WITH CLUBPOSITION,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  26. 依預設,已分割表格的大型物件位於與資料相同的表格空間中。 可以透過使用 LONG IN 子句為大型物件指定一個以上表格空間,來置換此預設行為。 建立名為 DOCUMENTS 的表格,其大型物件資料將儲存在表格空間 TBSP1 及 TBSP2 中(針對每一個資料分割區以循環方式)。
       CREATE TABLE DOCUMENTS
         (ID INTEGER,
          CONTENTS CLOB)
         LONG IN TBSP1, TBSP2
         PARTITION BY RANGE (ID)
           (STARTING 1 ENDING 1000
            EVERY 100)
    或者,使用完整形式的語法來明確識別每一個資料分割區的大型表格空間。 在此範例中,第一個資料分割區的 CLOB 資料放置在 LARGE_TBSP3 中,其餘資料分割區的 CLOB 資料以循環方式分散在 LARGE_TBSP1 及 LARGE_TBSP2 中。
       CREATE TABLE DOCUMENTS
         (ID INTEGER,
          CONTENTS CLOB)
         LONG IN LARGE_TBSP1, LARGE_TBSP2
         PARTITION BY RANGE (ID)
           (STARTING 1 ENDING 100
            IN TBSP1 LONG IN LARGE_TBSP3,
            STARTING 101 ENDING 1000
            EVERY 100)
  27. 建立名為 ACCESSNUMBERS 且具有兩個資料分割區的已分割表格。 列 (10, NULL) 將放置在第一個分割區中,而列 (NULL, 100)將放置在第二個(最後一個)資料分割區中。
       CREATE TABLE ACCESSNUMBERS
         (AREA INTEGER,
          EXCHANGE INTEGER)
         PARTITION BY RANGE (AREA NULLS LAST, EXCHANGE NULLS FIRST)
           (STARTING (1,1) ENDING (10,100),
            STARTING (11,1) ENDING (MAXVALUE,MAXVALUE))
    因為第二個直欄中的空值會首先排序,所以列 (11, NULL) 會排序在最後一個資料分割區 (11, 1) 的下限以下;嘗試插入此列會傳回錯誤。 列 (12, NULL) 將落在最後一個資料分割區內。
  28. 建立名為 RATIO 且具有單一資料分割區及分割直欄 PERCENT 的表格。
       CREATE TABLE RATIO
         (PERCENT INTEGER)
         PARTITION BY RANGE (PERCENT)
           (STARTING (MINVALUE) ENDING (MAXVALUE))
    此表格定義容許插入直欄 PERCENT 的任何整數值。 RATIO 表格的下列定義容許將介於 1 到 100(含兩者)之間的任何整數值插入至直欄 PERCENT。
       CREATE TABLE RATIO
         (PERCENT INTEGER)
         PARTITION BY RANGE (PERCENT)
           (STARTING 0 EXCLUSIVE ENDING 100 INCLUSIVE)
  29. 建立名為 MYDOCS 且具有兩個直欄的表格:一個是 ID,另一個儲存 XML 文件。
       CREATE TABLE MYDOCS
         (ID INTEGER,
          DOC XML)
       IN HLTBSPACE
  30. 建立名為 NOTES 的表格,包含四個直欄,其中一個用於儲存 XML 型附註。
       CREATE TABLE NOTES
         (ID          INTEGER,
          DESCRIPTION VARCHAR(255),
          CREATED     TIMESTAMP,
          NOTE        XML)
  31. 建立表格 EMP_INFO,其中包含每一個員工的電話號碼及地址。 在表格中包括 ROW CHANGE TIMESTAMP 直欄,以追蹤員工資訊的修改。
    CREATE TABLE EMP_INFO
         (EMPNO           CHAR(6) NOT NULL,
          EMP_INFOCHANGE  TIMESTAMP NOT NULL GENERATED ALWAYS
           FOR EACH ROW ON UPDATE
           AS ROW CHANGE TIMESTAMP,
          EMP_ADDRESS     VARCHAR(300),
          EMP_PHONENO     CHAR(4),
          PRIMARY KEY (EMPNO) )
  32. 建立名為 DOCUMENTS 且具有兩個資料分割區的分割表格:
    • 第一個分割區中的資料物件位於表格空間 TBSP11中。 分割區上的已分割索引分割區位於表格空間 TBSP21 中。 XML 資料物件位於表格空間 TBSP31 中。
    • 第二個分割區中的資料物件位於表格空間 TBSP12 中。 分割區上的已分割索引分割區位於表格空間 TBSP22 中。 XML 資料物件位於表格空間 TBSP32 中。
    表格層次 INDEX IN 子句對已分割索引的表格空間選擇沒有影響。
       CREATE TABLE DOCUMENTS
       (ID        INTEGER,
        CONTENTS  XML)  INDEX IN TBSPX
       PARTITION BY (ID NULLS LAST)
       (STARTING FROM 1 INCLUSIVE ENDING AT 100 INCLUSIVE
        IN TBSP11 INDEX IN TBSP21 LONG IN TBSP31,
        STARTING FROM 101 INCLUSIVE ENDING AT 200 INCLUSIVE
        IN TBSP21 INDEX IN TBSP22 LONG IN TBSP32)
  33. 建立名為 SALES 且具有兩個資料分割區的已分割表格:
    • 第一個分割區中的資料物件位於表格空間 TBSP11中。 分割區上的已分割索引分割區位於表格空間 TBSP21 中。
    • 第二個分割區中的資料物件位於表格空間 TBSP12 中。 已分割的索引物件位於表格空間 TBSP22 中。
    表格層次 INDEX IN 子句對已分割索引的表格空間選擇沒有影響。
       CREATE TABLE SALES
       (SID     INTEGER,
        AMOUNT  INTEGER)  INDEX IN TBSPX
       PARTITION BY RANGE (SID NULLS LAST)
       (STARTING FROM 1 INCLUSIVE ENDING AT 100 INCLUSIVE
        IN TBSP11 INDEX IN TBSP21,
        STARTING FROM 101 INCLUSIVE ENDING AT 200 INCLUSIVE
        IN TBSP12 INDEX IN TBSP22)
    
  34. 建立名為 BOOKS 的表格,其中包含一個名為 DATE_ADDED 的直欄,依預設會插入現行 TIMESTAMP。
       CREATE TABLE BOOKS
         (ISBN_NUM   INTEGER,
          TITLE      VARCHAR(255),
          AUTHOR     VARCHAR(255),
          DATE_ADDED TIMESTAMP WITH DEFAULT CURRENT TIMESTAMP)
  35. 在非 Unicode 資料庫中建立稱為 STUSETS 的 Unicode 表格。 假設資料庫是使用字碼集 1252 及專屬區 CA 建立的,且 ALT_COLLATE 資料庫配置參數已更新為 IDENTITY_16BIT。
       CREATE TABLE STUDENTS (
       		    STUDENTID INT NOT NULL, 
          		FAMILY_NAME VARCHAR(36) NOT NULL,
          		GIVEN_NAME VARCHAR(36) NOT NULL, 
          		PRIMARY KEY(STUDENTID)) 
       	  CCSID UNICODE
  36. 根據範例 1 中建立的 TDEPT 表格,建立一個稱為 TEPT_TEMP 的表格。
       CREATE TABLE TDEPT_TEMP LIKE TDEPT
    TDEPT_TEMP 表格將具有與 TDEPT 相同的定義,但不會定義主要索引鍵,且會隱含地選擇預設表格空間。
  37. 在 column-organized 表格 CDE.TDEPT 上建立 column-organized user-maintained 具體化查詢表格。
       CREATE TABLE mqt_tdept AS
          (SELECT *
            FROM cde.tdept
            WHERE deptno BETWEEN 10 AND 20)
          DATA INITIALLY DEFERRED
          REFRESH DEFERRED
          MAINTAINED BY USER
          ORGANIZE BY COLUMN
  38. 具體化查詢表格所繼承的直欄安全標籤。
       CREATE SECURITY LABEL COMPONENT level_array ARRAY ['A', 'B', 'C']
    
       CREATE SECURITY POLICY P COMPONENTS level_array WITH DB2LBACRULES
    
       CREATE SECURITY LABEL P.A COMPONENT level_array 'A'
    
       CREATE SECURITY LABEL P.B COMPONENT level_array 'B'
    
       CREATE SECURITY LABEL P.C COMPONENT level_array 'C'
    
       CREATE TABLE t1 (c1 INT, c2 INT SECURED WITH B, c3 REAL SECURED WITH A)
          SECURITY POLICY P
    
       CREATE TABLE t2 (c4 REAL, c5 INT SECURED WITH C, c6 DB2SECURITYLABEL)
          SECURITY POLICY P
    產生具體化查詢表格
    CREATE TABLE m1 AS
       (SELECT  c1, c3, c5, c6 FROM  t1,t2 WHERE c2 !=100)
       DATA INITALLY DEFERRED REFRESH DEFERRED
    t1.c2 的安全標籤用來計算 m1 所有直欄的安全標籤,因為它出現在查詢的述詞中。 具體化查詢表格 m1 的標籤型存取控制內容如下:
    • 安全原則 = P
    • 直欄 m1.c1 = P.B 的安全標籤
    • 直欄 m1.c3 = P.A 的安全標籤
    • 直欄 m1.c5 = P.B 的安全標籤
    • 直欄 m1.c6 = P.B 的安全標籤,它也是 DB2SECURITYLABEL。
    具體化查詢表格的暫置表格受到標籤型存取控制的保護。 暫置表格 st1 定義為:
       CREATE TABLE st1 FOR m1 PROPAGATE IMMEDIATE
    暫置表格 st1 的標籤型存取控制內容如下:
    • 安全原則 = P
    • 直欄 st1.c1 = P.B 的安全標籤
    • 直欄 st1.c3 = P.A 的安全標籤
    • 直欄 st1.c5 = P.B 的安全標籤
    • 直欄 st1.c6 = P.B 的安全標籤,它也是 DB2SECURITYLABEL。
  39. 下列範例顯示如何根據 row-organized 表格 T1 建立稱為 T1_SHADOW 的備用表格。

    1. 建立基本表格並定義主要索引鍵。 基本表格上的主要索引鍵必須併入備用表格的選取清單中。 陰影表格上的主要索引鍵需要為基本表格中的每一列提供一對一對映,以對映至備用表格中的對應列。 主要索引鍵也有助於維護備用表格。
      CREATE TABLE t1 (
        c1 INTEGER NOT NULL,
        c2 INTEGER
      ) ORGANIZE BY ROW;
      
      ALTER TABLE t1
        ADD CONSTRAINT t1_pk PRIMARY KEY(c1);
    2. 建立備用表格:
      CREATE TABLE t1_shadow AS
          (SELECT c1, c2 FROM t1)
        DATA INITIALLY DEFERRED
        REFRESH DEFERRED
        MAINTAINED BY REPLICATION
        ORGANIZE BY COLUMN;
      
      SET INTEGRITY FOR t1_shadow ALL IMMEDIATE UNCHECKED;
      
      ALTER TABLE t1_shadow
        ADD CONSTRAINT t1_shadow_pk PRIMARY KEY (c1);
  40. 建立名為 STRING_UNITS 的表格,以示範每一個可能的字串單元規格。
    CREATE TABLE string_units
       (c1 VARCHAR(10),
        c2 VARCHAR(10 OCTETS),
        c3 VARCHAR(10 CODEUNITS32),
        c4 VARGRAPHIC(10),
        c5 VARGRAPHIC(10 CODEUNITS16),
        c6 VARGRAPHIC(10 CODEUNITS32))
    直欄具有下列字串單元:
    • c1 = OCTETS,如果環境字串單元是 SYSTEM; CODEUNITS32,如果環境字串單元是 CODEUNITS32
    • c2 = OCTETS
    • c3 = CODEUNITS32
    • c4 = CODEUNITS16,如果環境字串單元是 SYSTEM;CODEUNITS32,如果環境字串單元是 CODEUNITS32
    • c5 = CODEUNITS16
    • c6 = CODEUNITS32
    環境字串單元可以使用 NLS_STRING_UNITS 階段作業層次廣域變數來設定。 如果 NLS_STRING_UNITS 階段作業層次廣域變數未設定或為空值,則環境字串單元是由 string_units 資料庫配置參數的值決定。
  41. 使用隨機(依唯一方法)來建立隨機配送表。 配送索引鍵會自動設為索引的兩個索引鍵:IDNAME
    CREATE TABLE RAND_BY_UNIQUE (ID BIGINT NOT NULL,
                                 NAME CHAR(25) NOT NULL,
                                 DESCRIPTION VARCHAR(1000),
                                 PRIMARY KEY(ID, NAME)) DISTRIBUTE BY RANDOM
  42. 使用隨機產生方法來建立隨機配送表。 配送索引鍵會設為內部直欄 RANDOM_DISTRIBUTION_KEY,除非明確指定,否則會對 SQL 隱藏該直欄。
    CREATE TABLE RAND_BY_GENERATION (C1 BIGINT) DISTRIBUTE BY RANDOM