CREATE TABLE
CREATE TABLE文は、表を定義します。
CREATE TABLE文は、TimesTen ScaleoutおよびTimesTen Classicでサポートされています。ただし、構文とセマンティクスでは違いがあります。わかりやすくするために、サポートされている構文、パラメータ、説明(セマンティクス)およびTimesTen ScaleoutとTimesTen Classicの例は、TimesTen Scaleoutでの使用方法とTimesTen Classicでの使用方法に分けられています。使用方法に繰返しがありますが、構文からパラメータへ進み、セマンティクスから各使用方法の例に進むことができるように、このような方法で示されています。
必要な権限セクションを確認してから、次を確認してください。
必要な権限
CREATE TABLE(所有者の場合)またはCREATE ANY TABLE(非所有者の場合)。
作成された表の所有者には、REFERENCE句によって参照される表に対するREFERENCES権限が必要です。
TimesTen Classicの場合:
-
DDL_REPLICATION_LEVEL=2以上およびDDL_REPLICATION_ACTION=INCLUDEのときに、アクティブ・スタンバイ・ペア間で新しい表をレプリケートする場合は、ADMIN権限が必要です。 -
これらの属性によって、
CREATE TABLEでは暗黙的にALTER ACTIVE STANDBY PAIR...INCLUDE TABLE文が実行されます。詳細は、「ALTER SESSION」を参照してください。
この項を確認した後、次を参照してください。
CREATE TABLE: TimesTen Scaleoutでの使用方法
この文は、TimesTen Scaleoutでサポートされています。列ベースの圧縮およびエージングはサポートされていません。グローバル一時表では、索引使用句と分散句はサポートされていません。
次を参照してください。
CREATE TABLE: TimesTen Classicでの使用方法
次を参照してください。
CREATE TABLEのSQL構文: TimesTen Scaleout
永続表の構文は、次のとおりです。
CREATE TABLE [Owner.]TableName ( ColumnDefinition [,...] [PRIMARY KEY (ColumnName [,...]) [UsingIndexClause1]]| [[CONSTRAINT ForeignKeyName] FOREIGN KEY ([ColumnName] [,...]) REFERENCES RefTableName [(ColumnName [,...])] [ON DELETE CASCADE]] [...] ) [UNIQUE HASH ON (HashColumnName [,...]) PAGES = PrimaryPages] [DistributionClause] [AS SelectQuery]
次に、UsingIndexClause1の構文を示します。ノート: CreateIndexStmtは、TimesTenのCREATE INDEX文です。詳細は、「CREATE INDEX」を参照してください。一意索引は主キーの要件であるため、その索引を作成する必要があります。
UsingIndexClause1::= USING INDEX {GLOBAL | LOCAL}| USING INDEX (CreateIndexStmt)DistributionClauseの構文は、次のとおりです。DistributionClause::= DISTRIBUTE BY HASH [(ColumnName [,...])] | DISTRIBUTE BY REFERENCE [(ForeignKeyConstraint)] | DUPLICATE
ノート:
PRIMARY KEYを、ColumnDefinition句とPRIMARY KEY句の両方で指定することはできません。UsingIndexClause1句を指定する場合は、PRIMARY KEYを指定する必要があり、PRIMARY KEYはColumnDefinition句の後に指定する必要があります。UsingIndexClause1句は、ColumnDefinition句の一部としては指定できません。
グローバル一時表の構文:
UsingIndexClause1とDistributionClauseは、グローバル一時表ではサポートされていません。構文は次のとおりです:
CREATE GLOBAL TEMPORARY TABLE [Owner.]TableName ( {{ColumnDefinition} [,...] [PRIMARY KEY (ColumnName [,...])] | [[CONSTRAINT ForeignKeyName] FOREIGN KEY ([ColumnName] [,...]) REFERENCES RefTableName [(ColumnName [,...])] [ON DELETE CASCADE]] [...] } ) [UNIQUE HASH ON (HashColumnName [,...]) PAGES = PrimaryPages] [ON COMMIT { DELETE | PRESERVE } ROWS ]
CREATE TABLEのパラメータ: TimesTen Scaleout
| パラメータ | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
[UsingIndexClause1] |
UsingIndexClause1はオプションです。説明は、この表の次の2行に示します。CREATE TABLEの定義には、2つのUSING INDEX句を指定できません。この句を使用すると、PRIMARY KEYに対するグローバル索引またはローカル索引を定義できます。
|
USING INDEX {GLOBAL|LOCAL} |
[UsingIndexClause1]の一部。指定することで、主キーにグローバル索引またはローカル索引を作成するかどうかを示します。
|
USING INDEX (CreateIndexStmt) |
[UsingIndexClause1]句の一部。このUSING INDEX句が指定されている場合、(CreateIndexStmt)句は、TimesTenのCREATE INDEX文に従って索引を定義することを示します。カッコ( )が必要です。主キーの要件に応じて、一意索引を作成する必要があります。
|
|
|
オプションのユーザー定義の名前を外部キーに指定します。ユーザーが指定しない場合は、システムによってデフォルトの名前が指定されます。 |
|
|
新しい表と 最初のリストの列は、新しい表の列であり、参照元列と呼ばれます。2番目のリストの列は、参照先の表の列であり、参照先列と呼ばれます。これら2つのリストは、長さ、精度、スケールを含めてデータ型が一致している必要があります。参照先の表には、参照先列に対する主キーまたは一意索引がすでに存在している必要があります。 参照先列の列名リストはオプションです。省略した場合、 外部キーを宣言することにより、参照元列に範囲索引が作成されます。参照先の表またはその参照先の索引は、参照元表を削除しないかぎり削除できません。 外部キー制約によって、新しい表の各行と参照先の表の行は、参照元列の内容と参照先列の内容が同じになるように一致させる必要があります。 TimesTenでは、SQL-92 外部キーはグローバル一時表で定義できますが、グローバル一時表の参照のみを行うことができます。親表が 外部キーは、アクティブな親表を参照できません。アクティブな親表とは、接続に対してマテリアライズされたインスタンスを持つ表のことです。
|
|
|
|
|
|
表のハッシュ索引。 |
|
|
表に定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。
|
|
|
表の想定ページ数に基づいてハッシュ索引のサイズを設定します。
|
|
|
グローバル一時表を作成するトランザクションがコミットされるときに、行を削除するか、または保存するかを指定するオプションの文です。この文が指定されていない場合は、一時表の行が削除されます。 |
|
|
指定すると、 データ型およびデータ型の長さは、
|
|
|
TimesTen Scaleoutのみでサポートされています。3つのオプションがあります。
句を指定しない場合、デフォルトは
分散キー列は更新できません。 |
|
|
作成する表をグローバル一時表にします。一時表は永続表と類似していますが、接続で参照された場合にのみ効率的にマテリアライズされます。 グローバル一時表定義は永続的であり、すべての接続に対して表示されますが、表インスタンスは各接続に対してローカルです。表インスタンスは、表を参照するコマンドが接続に対してコンパイルされる場合に作成され、接続が切断されると削除されます。同じ一時表のすべてのインスタンスの名前は同じですが、表名と追加の接続IDに基づいて識別されます。グローバル一時表は、一時領域に割り当てられます。 グローバル一時表の内容は接続間で共有できません。各接続では、その接続の表の内容のみが表示され、一時表を参照するコンパイルされたコマンドは接続間で共有されません。 一時表の操作でログ・レコードが生成されます。生成されるログの量は、永続表用よりも少なくなります。
ローカルの一時表は、サポートされていません。 グローバル一時表にアクセスするには、オブジェクト権限は必要ありません。 グローバル一時表には |
|
|
表の列の名前。 主キー定義で名前が使用されている場合、名前は作成する表の主キーを形成します。主キーには最大16列を指定できます。外部キーの場合、
|
列定義: TimesTen Scaleout
SQL構文
ENABLEキーワードは、CREATE TABLE文で列を定義する場合にのみ使用できます。
構文は次のとおりです。
ColumnName ColumnDataType [DEFAULT DefaultVal] [[NOT] INLINE] [PRIMARY KEY | UNIQUE | NULL [UNIQUE] | NOT NULL [ENABLE] [PRIMARY KEY | UNIQUE] ]
列定義のパラメータ
列定義には、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
新しい表の列に割り当てる名前です。表の2つの列に同じ名前を指定することはできません。1つの表の列数は最大で1000です。
|
|
|
列に格納できるデータ型です。長さを指定する必要があるデータ型もあります。指定できるデータ型の詳細は、「データ型」を参照してください。
|
|
|
デフォルト値がユーザーのいずれかである場合、列のデータ型は
|
|
|
デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。
|
|
|
列に
|
|
|
列に
|
|
|
列に設定される一意制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。一意性を実現するために、TimesTenでは一意の範囲索引が作成されます。つまり、一意制約を持つ列は、制約を持たない列よりも多くのメモリーと時間を実行時に使用する可能性があります。
|
|
|
列に設定される一意の
|
CREATE TABLEのUSING INDEX句の説明: TimesTen Scaleout
CREATE TABLEの定義には、PRIMARY KEY句の後に追加の句を指定するオプションがあります。この句を使用すると、主キー制約に対するグローバル索引またはローカル索引を指定できます。
-
USINGINDEX {GLOBAL | LOCAL}句は、主キー制約に対するグローバル索引またはローカル索引を指定できるようにする1つのオプションです。GLOBALまたはLOCALのキーワードを指定する必要があります。ハッシュ索引を定義する場合は、USINGINDEX {GLOBAL | LOCAL}句の後にオプションでUSEHASHINDEX句を指定できます。 USING INDEX (CreateIndexStmt)句は、グローバル索引またはローカル索引を指定する別のオプションです。(CreateIndexStmt)句は、TimesTenのCREATEINDEX文に従って索引を定義することを示します。カッコ( )が必要です。主キー制約の要件に応じて、一意索引を作成する必要があります。CREATEINDEX文を使用してハッシュ索引を作成する場合は、CREATEINDEX文の詳細について、「CREATE INDEX」を参照してください。
ノート:
CREATE TABLEの定義では、USING INDEX {GLOBAL | LOCAL}とUSING INDEX (CreateIndexStmt)の両方を使用することはできません。どちらかの句を指定するか、どちらの句も指定しないでください。
PAGES=句があります。次のオプションを検討してください:
-
USINGINDEX...CreateIndexStmt句を指定してHASH索引を作成する場合は、PAGES=句を指定するオプションがあります。PAGES=句を指定しない場合、TimesTenは、デフォルトとしてPAGES=CURRENTを使用してハッシュ索引のサイズを設定します。(CREATEINDEX文の詳細は、「CREATE INDEX」を参照してください)。 -
UNIQUEHASHON句(CREATETABLE定義の一部)を指定する場合は、ハッシュ索引のサイズを設定するためのPAGES=句を指定する必要があります。 -
USINGINDEX...CreateIndexStmtとUNIQUEHASHON句の両方(CREATETABLE定義の一部)を指定すると、TimesTenは、UNIQUE HASH ON...PAGES=句で指定された値を使用してハッシュ索引のサイズを設定します。また、TimesTenは警告も発行します。この警告では、ハッシュ索引に対して異なるページ数の指定があることと、UNIQUE HASH ON...PAGES=句で指定された値を使用していることが示されます。
PAGES=句はCreateIndexStmt句(PAGES=200)とUNIQUE HASH ON句(PAGES=400)の両方で指定されています。TimesTenは警告を発行して、ハッシュ索引のサイズ設定にPAGES=400を使用します。Command> CREATE TABLE mytab (col1 TT_INTEGER, col2 TT_INTEGER, PRIMARY KEY (col1, col2)
USING INDEX (CREATE GLOBAL UNIQUE HASH INDEX myindex on mytab (col1,col2) PAGES=200))
UNIQUE HASH ON (col1,col2) PAGES=400 DISTRIBUTE BY HASH (col1);
Warning 2252: Different number of pages specified for hash index MYINDEX in table and index definition.
Index created with pages = 400
-
USINGINDEX句は、表に対する外部キー制約には使用できません。 -
USINGINDEX句は、ビューには使用できません。
グローバル索引とローカル索引およびそれらのTimesTen Scaleoutでの使用の詳細は、「CREATE INDEX」を参照してください。
CREATE TABLEの追加情報: TimesTen Scaleout
-
TimesTen Scaleoutは、3つの分散スキームのいずれかによってデータを分散します。
-
ハッシュ: TimesTen Scaleoutは、主キー列または
DISTRIBUTEDBYHASH句で指定された1つ以上の列のハッシュに基づいてデータを分散します。指定した行がレプリカ・セットに格納されます。行はレプリカ・セット間で均一に分散されます。大部分の表に適しているため、ハッシュはデフォルトの分散スキームです。 -
参照: TimesTen Scaleoutは外部キーで識別される親表の場所に基づいて子表のデータを分散します。子表の指定した行が親表と同じレプリカ・セットに存在します。この分散スキームは、1つのレプリカ・セット内の関連データを分散することで、結合を最適化します。ハッシュまたは参照によって親表を分散できます。ハッシュによって分散された場合、親はルート表と呼ばれます。子(外部)キー列を
NOTNULLとして定義する必要があります。 -
複製: TimesTen Scaleoutは、データの同一のコピーをデータベースのすべての要素に分散します。すべての行がすべての要素に存在します。この分散スキームは、各データ・インスタンスに同一のデータを格納することで、読取りのパフォーマンスを最適化します。この分散スキームは、比較的小さい、頻繁に読み取られる、変更頻度の低い表に適しています。
詳細は、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』の「表の分散スキームの定義」および「表の分散スキームの定義」を参照してください。
-
-
ハッシュ分散スキームを使用する表の場合:
-
指定された場合、分散キーが使用されます。
-
分散キーが指定されない場合は、主キーが使用されます。
-
主キーまたは分散キーがない場合は、非表示列が使用されます。データはランダムかつ均等に分散されます。
表に主キーが定義されている場合は、分散キーを指定する必要がありますが、主キーはデータを分散する最適な方法ではありません。主キーがなく、一意の列がある場合、この一意の列にデータを分散できます。主キーがなく、一意の列がない場合は、分散キーを指定しないでください。TimesTen Scaleoutは、非表示列にデータを分散します。
-
-
参照による分散スキームの場合:
-
DISTRIBUTEBYREFERENCE句では、1つの外部キー制約のみを参照できます。子表に複数の外部キー制約がある場合がありますが、参照分散を決定するために1つのみを使用できます。 -
参照先外部キー制約が複数ある場合は、制約句で指定する必要があります。
-
参照分散句内の外部キー制約は、主キーまたは親表の一意キーを参照する必要があります。親表がルートである場合、参照先キーは分散キーである必要があります。
-
親表の非分散キー列への外部キー関係を作成できますが、この外部キー関係に基づいて参照によって分散することはできません。
-
DISTRIBUTEBYREFERENCE句で使用されている外部キー列は更新できません。
-
- 表にデータをロードしようとしている場合は、索引のない表の作成を検討してください。索引は、データのロード後に作成できます。これにより、表へのデータのロードにかかる時間が短縮されます。例外は、外部キーと参照表を使用している場合です。
-
CREATETABLE...ASSELECT文を使用して、元表の定義に基づいて新しい表を作成できます。主キー制約は新しい表に引き継がれないため、新しい表に主キー制約を定義しない場合、データの分散方法が変更されることに注意してください。詳細は、「CREATE TABLE...AS SELECTの使用」を参照してください。
-
列を同じ値に更新しないかぎり、分散キー列を更新できません。
-
主キーに保存されるすべての列は、
NOT NULLである必要があります。 -
ColumnDefinitionで指定されたPRIMARY KEYは、1つの列に対してのみ指定できます。 -
PRIMARYKEYを、ColumnDefinition句とPRIMARYKEY句の両方で指定することはできません。 -
主キーおよび外部キー制約において、制約列リストでの列名の重複は許可されません。
-
主キー列は、列を同じ値に更新する以外の更新はできません。
-
インライン列ではなくアウトライン列を定義する際にパフォーマンスに関して考慮する事項があります。
-
TimesTenは、アウトライン列を使用してデータを連続して格納しないため、データへのアクセスは遅くなります。
-
TimesTenは、より多くのロギング操作を生成するため、データの移入が遅くなります。
-
TimesTenは、より多くの再利用操作およびロギング操作を実行するため、データの削除が遅くなります。
-
列を保存するとオーバーヘッドが少なくなります。
-
-
子表の外部キー制約で
ON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。 -
ON DELETE CASCADEトリガー・アクションを変更するには、外部キー制約を削除して再定義してください。 -
キャッシュ表を参照する外部キーを持つ表は作成できません。
-
UNIQUE列制約およびデフォルトの列の値は、マテリアライズド・ビューではサポートされていません。 -
表の主キーで使用する索引を変更するには、
ALTER TABLE文を使用します。 -
ASSelectQuery句を指定する場合:-
データ型およびデータ型の長さは、
SelectQueryから導出されます。作成する表の列にデータ型を指定しないでください。 -
SelectQueryで列を含む式ではなく列が選択された場合、TimesTenでは、新しい表の列に対して、選択された表の対応する列に明示的に作成されていたNOT NULL制約を定義します。 -
選択された表の列(主キーなど)でTimesTenにより暗黙的に作成されていた
NOT NULL制約は、新しい表に引き継がれます。選択した表のNOT NULL制約を無効にするには、新しい列をNULLとして定義します。次に例を示します:CREATE TABLE newtable (newcol NULL) AS SELECT (col) FROM tab;
-
NOT INLINE/INLINE属性は新しい表に引き継がれます。 -
一意キー、外部キー、索引および列のデフォルト値は、新しい表に引き継がれません。
-
SelectQueryのすべての式が式ではなく列である場合は、作成する表から列を省略できます。この場合、列の名前はSelectQueryの列と同じです。SelectQueryに単純な列参照ではなく式が含まれている場合は、列の別名を指定するか、またはCREATE TABLE文で列に名前を付けます。 -
作成する表に対して外部キーを指定しないでください。
-
SelectQueryでSELECT FOR UPDATEを指定しないでください。 -
ASSelectQuery句を使用する場合、ORDER BY句はサポートされません。 -
SelectQueryに集合演算子UNION、MINUSおよびINTERSECTを含めることはできません。
-
-
デフォルトでは、主キーを実現するために、範囲索引が作成されます。主キーに対してハッシュ索引を指定するには、
UNIQUE HASH句を使用してください。-
アプリケーションで表の主キーを使用して範囲問合せを実行する場合は、
UNIQUE HASH句を省略して、その表に対して範囲索引を選択してください。 -
主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、
UNIQUE HASH句を指定します。
-
-
ハッシュ索引は、表が存在している間、
ALTER TABLE文を使用してハッシュ索引がサイズ変更されるまで、または索引が削除されて再作成されるまで変更されない固定のサイズで作成されます。小さいハッシュ索引ほどハッシュの衝突が増えます。大きいハッシュ索引ほど衝突が少なくなりますが、メモリを消費しやすくなります。ハッシュ・キー比較は高速な操作であるため、少数のハッシュ衝突がTimesTenにパフォーマンスの問題を発生させることはありません。ハッシュ索引のサイズが適性に設定されていることを確認するには、
SETPAGES句のRowPagesパラメータの値により、アプリケーションで表の想定サイズを示す必要があります。この値は、表の想定行数を256で除算して計算します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。 -
ハッシュ・キーには、最大16列を指定できます。
-
ON DELETE CASCADEは、マテリアライズド・ビューのディテール表でサポートされています。子表に対して定義されたマテリアライズド・ビューがある場合、親表からの削除によって子表でカスケード削除が行われます。つまり、親表での削除により、マテリアライズド・ビューも変更されます。 -
DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。 -
ON DELETE CASCADE: 親表から子表へのパスが異なる場合があるため、次のルールが適用されます。-
親表から子表へのすべてのパスを、deleteパスかdo not deleteパスのいずれかに統一します。deleteパスのすべての子表で
ON DELETE CASCADEを指定します。 -
このルールは、1つの親表から複数の子表へ、または複数の親表から1つの子表へのパスには適用されません。
-
-
ON DELETE CASCADEには、次の規則も適用されます。-
ある表にdeleteパスでアクセスする場合、その表のすべての子表にもdeleteパスでアクセスします。
-
-
グローバル一時表のデータは現在の接続専用となり、ユーザー間で保護する必要はありません。このため、グローバル一時表にオブジェクト権限は必要ありません。
例: TimesTen Scaleoutのグローバル索引とローカル索引
次に示す例は、CREATE TABLE...PRIMARY KEYでグローバル索引を使用するための様々な構文の使用を示しています。
USING INDEX GLOBAL句を使用して、グローバル範囲索引を作成します。主キーの要件と同様に、この索引は一意にする必要があります。Command> CREATE TABLE mytab (c TT_INTEGER, b TT_INTEGER, a TT_INTEGER,
PRIMARY KEY (c,b) USING INDEX GLOBAL) DISTRIBUTE BY HASH (a,b);
Command> indexes mytab;
Indexes on table SAMPLEUSER.MYTAB:
MYTAB: global unique range index on columns:
C
B
1 index found.
1 index found on 1 table
Command> DROP TABLE mytab;主キーを指定する表を作成します。USING INDEX LOCAL句を使用して、ローカル範囲索引を作成します。主キーの要件と同様に、この索引は一意にする必要があります。
Command> CREATE TABLE mytab (c TT_INTEGER, b TT_INTEGER, a TT_INTEGER,
PRIMARY KEY (c,b) USING INDEX LOCAL DISTRIBUTE BY HASH (a,b);
Command> indexes mytab;
Indexes on table SAMPLEUSER.MYTAB:
MYTAB: unique range index on columns:
C
B
1 index found.
1 index found on 1 table.
Command> DROP TABLE mytab;主キーを指定する表を作成します。USING INDEX (CreateIndexStmt)句を使用して、グローバル範囲索引を作成します。(CreateIndexStmt)句は、TimesTenのCREATE INDEX文に従って索引を定義することを示します。カッコ( )が必要です。索引の作成時には、UNIQUEキーワードを指定する必要があります。これは主キーの要件です。この文の詳細は、「CREATE INDEX」を参照してください。
Command> CREATE TABLE mytab (c TT_INTEGER, b TT_INTEGER, a TT_INTEGER,
PRIMARY KEY (c,b) USING INDEX (CREATE GLOBAL UNIQUE INDEX GlobalUniqueIdx ON mytab (c,b))) DISTRIBUTE BY HASH (a,b);
Command> indexes mytab;
Indexes on table SAMPLEUSER.MYTAB:
GLOBALUNIQUEIDX: global unique range index on columns:
C
B
1 index found.
1 index found on 1 table.
Command> DROP TABLE mytab;主キーを指定する表を作成します。USING INDEX (CreateIndexStmt)句を使用して、グローバル範囲索引を作成します。(CreateIndexStmt)句は、TimesTenのCREATE INDEX文に従って索引を定義することを示します。カッコ( )が必要です。CREATE INDEX定義では、索引定義に追加の列を含めるためのINCLUDE句を指定します。索引の作成時には、UNIQUEキーワードを指定する必要があります。これは主キーの要件です。この文の詳細は、「CREATE INDEX」を参照してください。
Command> CREATE TABLE mytab (c TT_INTEGER, b TT_INTEGER, a TT_INTEGER,
PRIMARY KEY (c,b) USING INDEX (CREATE GLOBAL UNIQUE INDEX GlobalUniqueIdx
ON mytab (c,b) INCLUDE (a))) DISTRIBUTE BY HASH (a,b);
Command> indexes mytab;
Indexes on table SAMPLEUSER.MYTAB:
GLOBALUNIQUEIDX: global unique range index on columns:
C
B
Included columns:
A
1 index found.
1 index found on 1 table.
Command> DROP TABLE mytab;主キーを指定する表を作成します。USING INDEX (CreateIndexStmt)句を使用して、グローバル一意ハッシュ索引を作成します。(CreateIndexStmt)句は、TimesTenのCREATE INDEX文に従って索引を定義することを示します。カッコ( )が必要です。索引の作成時には、UNIQUEキーワードを指定する必要があります。これは主キーの要件です。この文の詳細は、「CREATE INDEX」を参照してください。
Command> CREATE TABLE mytab (c TT_INTEGER, b TT_INTEGER, a TT_INTEGER,
PRIMARY KEY (c,b) USING INDEX (CREATE GLOBAL UNIQUE HASH INDEX GlobalUniqueIdx
ON mytab (c,b))) DISTRIBUTE BY HASH (a,b);
Command> indexes mytab;
Indexes on table SAMPLEUSER.MYTAB:
GLOBALUNIQUEIDX: global unique hash index on columns:
C
B
1 index found.
1 index found on 1 table.
Command> DROP TABLE mytab;その他の例: TimesTen Scaleout
これらの例では、重複、ハッシュおよび参照分散スキームを使用して表を作成する方法を示します。
これらの例では、DISTRIBUTE BY REFERENCE分散スキームを使用して表を作成する方法を示します。
「CREATE TABLE...AS SELECTの使用」には、TimesTen ScaleoutでのCREATE TABLE...AS SELECTの使用方法が示されています。
account_type表の作成
この例では、ttIsqlを実行してaccount_type表を作成し、複製分散スキームを使用してデータを分散します。この表には少数の行が含まれ、複製分散スキームを使用して読取りを最適化します。表内のデータのコピーはデータベースのすべての要素に分散されます。
Command> CREATE TABLE account_type ( type CHAR(1) NOT NULL PRIMARY KEY,
description VARCHAR2(100) NOT NULL) DUPLICATE;account_status表の作成
この例では、ttIsqlを実行してaccount_status表を作成し、複製分散スキームを使用します。表のサイズは小さく、分散スキームを使用して読取りを最適化します。表内のデータのコピーはデータベースのすべての要素に分散されます。
Command> CREATE TABLE account_status(status NUMBER(2) NOT NULL PRIMARY KEY,
description VARCHAR2(100) NOT NULL) DUPLICATE;顧客表の作成
この例では、ttIsqlを実行してcustomers表を作成し、ハッシュによって表を分散します。表内のデータは、cust_id列(主キー)のハッシュに基づいて各要素に分散されます。
Command> CREATE TABLE customers(cust_id NUMBER(10,0) NOT NULL PRIMARY KEY,
first_name VARCHAR2(30) NOT NULL,last_name VARCHAR2(30) NOT NULL,
addr1 VARCHAR2(64),addr2 VARCHAR2(64), zipcode VARCHAR2(5),
member_since DATE NOT NULL)
DISTRIBUTE BY HASH;アカウント表の作成
この例では、ttIsqlを実行してaccounts表を作成し、3つの主キー/外部キー関係を定義します。accounts表は参照によって分散され、データはfk_customer外部キー制約に基づいて分散されます。このスキームは、(fk_customer外部キー制約の) customers.cust_id親列の対応する値の場所に基づいてaccounts表のデータを分散することで、結合のパフォーマンスを最適化します。子表の行は、親表と同じレプリカ・セットに存在します。結合が主キーまたは外部キーで実行される場合、データは1つの要素に格納されるため、TimesTen Scaleoutは様々な要素にアクセスする必要がありません。
Command> CREATE TABLE accounts(account_id NUMBER(10,0) NOT NULL PRIMARY KEY,
phone VARCHAR2(15) NOT NULL,account_type CHAR(1) NOT NULL,
status NUMBER(2) NOT NULL,current_balance NUMBER(10,2) NOT NULL,
prev_balance NUMBER(10,2) NOT NULL,date_created DATE NOT NULL,
cust_id NUMBER(10,0) NOT NULL,
CONSTRAINT fk_customer FOREIGN KEY (cust_id)
REFERENCES customers(cust_id),CONSTRAINT fk_acct_type
FOREIGN KEY (account_type)
REFERENCES account_type(type),
CONSTRAINT fk_acct_status
FOREIGN KEY (status)
REFERENCES account_status(status)
)
DISTRIBUTE BY REFERENCE (fk_customer);トランザクション表の作成
この例では、ttIsqlを実行してtransactions表を作成します。transactions表は参照によって分散され、データはfk_accounts外部キー制約に基づいて分散されます。このスキームは、(fk_accounts外部キー制約の) accounts.account_id親列の対応する値の場所に基づいてtransaction表のデータを分散することで、結合のパフォーマンスを最適化します。子表の行は、親表と同じレプリカ・セットに存在します。結合が主キーまたは外部キーで実行される場合、データは1つの要素に格納されるため、TimesTen Scaleoutは様々な要素にアクセスする必要がありません。
accounts親表も参照によって分散されます。これは、参照分散階層による2レベルの分散を定義します。
Command> CREATE TABLE transactions(transaction_id NUMBER(10,0) NOT NULL,
account_id NUMBER(10,0) NOT NULL ,
transaction_ts TIMESTAMP NOT NULL,
description VARCHAR2(60),
optype CHAR(1) NOT NULL,
amount NUMBER(6,2) NOT NULL,
PRIMARY KEY (account_id, transaction_id, transaction_ts),
CONSTRAINT fk_accounts FOREIGN KEY (account_id)
REFERENCES accounts(account_id)
)
DISTRIBUTE BY REFERENCE (fk_accounts);表の表示
この例では、ttIsql tablesコマンドを実行して、データベースの表を表示します。
Command> tables; SAMPLEUSER.ACCOUNTS SAMPLEUSER.ACCOUNT_STATUS SAMPLEUSER.ACCOUNT_TYPE SAMPLEUSER.CUSTOMERS SAMPLEUSER.TRANSACTIONS 5 tables found.
accounts表の定義の表示
この例では、ttIsql describeコマンドを実行して、accounts表の定義を表示します。
Command> describe accounts;
Table SAMPLEUSER.ACCOUNTS:
Columns:
*ACCOUNT_ID NUMBER (10) NOT NULL
PHONE VARCHAR2 (15) INLINE NOT NULL
ACCOUNT_TYPE CHAR (1) NOT NULL
STATUS NUMBER (2) NOT NULL
CURRENT_BALANCE NUMBER (10,2) NOT NULL
PREV_BALANCE NUMBER (10,2) NOT NULL
DATE_CREATED DATE NOT NULL
CUST_ID NUMBER (10) NOT NULL
DISTRIBUTE BY REFERENCE (FK_CUSTOMER)
1 table found.
(primary key columns are indicated with *)1つの外部キーを含むDISTRIBUTE BY REFERENCE
この例は、DISTRIBUTE BY REFERENCE句で外部キー制約を指定する必要がないことを示しています。1つの外部キーのみがあります。
最初にOrders表を作成し、ハッシュによって分散します。
Command> CREATE TABLE Orders
(OrderId TT_INTEGER NOT NULL PRIMARY KEY,
OrderDate DATE NOT NULL,
discount BINARY_FLOAT)
DISTRIBUTE BY HASH;
1つの外部キー制約を含むOrderDetails表を作成します。分散句で制約を指定する必要はありません。
Command> CREATE TABLE OrderDetails
(OrderId TT_INTEGER NOT NULL,
PartId TT_INTEGER NOT NULL,
Quantity TT_INTEGER NOT NULL,
FOREIGN KEY (OrderId)
REFERENCES Orders (OrderId))
DISTRIBUTE BY REFERENCE;
ttIsql describeコマンドを実行して、表を表示します。
Command> describe Orders;
Table SAMPLEUSER.ORDERS:
Columns:
*ORDERID TT_INTEGER NOT NULL
ORDERDATE DATE NOT NULL
DISCOUNT BINARY_FLOAT
DISTRIBUTE BY HASH (ORDERID)
1 table found.
(primary key columns are indicated with *)
Command> describe OrderDetails;
Table SAMPLEUSER.ORDERDETAILS:
Columns:
ORDERID TT_INTEGER NOT NULL
PARTID TT_INTEGER NOT NULL
QUANTITY TT_INTEGER NOT NULL
DISTRIBUTE BY REFERENCE
1 table found.
(primary key columns are indicated with *)複数の外部キーを含む表
この例は、表に複数の外部キー制約が含まれている場合、参照として使用される外部キー制約をDISTRIBUTE BY REFERENCE句で指定する必要があることを示しています。customers2表は親となり、ハッシュによって分散されます。OrderDetails2表には2つの外部キー制約が含まれており、この表は参照によってc1_1制約で分散されます。この制約をDISTRIBUTED BY REFERENCE句に含める必要があります。
Command> CREATE TABLE customers2 (CustomerId TT_INTEGER NOT NULL PRIMARY KEY,
LastOrderDate DATE NOT NULL,PromotionDiscount BINARY_FLOAT)
DISTRIBUTE BY HASH;
Command> CREATE TABLE OrderDetails2 (OrderId TT_INTEGER NOT NULL,
CustomerId TT_INTEGER NOT NULL, Quantity TT_INTEGER NOT NULL,
CONSTRAINT c1_1 FOREIGN KEY (OrderId)
REFERENCES Orders (OrderId),
CONSTRAINT c2_2 FOREIGN KEY (CustomerId)
REFERENCES Customers2 (CustomerId))
DISTRIBUTE BY REFERENCE (c1_1);親表の分散キーに基づかない外部キー関係
この例は、OrderId主キーおよびCouponId一意キーを持つorders2親表を作成します。この表は、ハッシュによって分散されます。分散キーが指定されていないため、データはハッシュによってOrderId主キーで分散されます。coupons子表はCouponId一意キーに外部キー関係を確立します。このキーはorders2親表の分散キーではないため、TimesTen Scaleoutはエラーをスローします。
Command> CREATE TABLE Orders2 (OrderId TT_INTEGER NOT NULL PRIMARY KEY,
CouponId TT_INTEGER NOT NULL UNIQUE, OrderDate DATE NOT NULL,
discount BINARY_FLOAT)
DISTRIBUTE BY HASH;
Command> CREATE TABLE Coupons (CouponId TT_INTEGER NOT NULL,
discount BINARY_FLOAT,
CONSTRAINT CouponC1 FOREIGN KEY (CouponId)
REFERENCES Orders2 (CouponId) )
DISTRIBUTE BY REFERENCE (CouponC1);
1067: The Parent keys for a distribute by reference table with hash distributed
parent must include the distribution keys of the parent.
The command failed.第1レベルおよび第2レベルの子外部キー関係の使用
この例では、Coupons2親表を作成し、ハッシュによってデータを分散します。Orders3子表は第1レベルの外部キー関係として作成され、親表(Coupons2)はルート表です。OrderDetails3子表は第2レベルの外部キー関係として作成され、親表(Orders3)は参照表です。
Command> CREATE TABLE Coupons2 (CouponId TT_INTEGER NOT NULL PRIMARY KEY,
discount BINARY_FLOAT)
DISTRIBUTE BY HASH;
Command> CREATE TABLE Orders3 (OrderId TT_INTEGER NOT NULL PRIMARY KEY,
CouponId TT_INTEGER NOT NULL, OrderDate DATE NOT NULL,
discount BINARY_FLOAT, CONSTRAINT c1_coupons FOREIGN KEY (CouponId)
REFERENCES Coupons2 (CouponId))
DISTRIBUTE BY REFERENCE (c1_coupons);
Command> CREATE TABLE OrderDetails3 (OrderId TT_INTEGER NOT NULL,
PartId TT_INTEGER NOT NULL, quantity TT_INTEGER NOT NULL,
CONSTRAINT c1_orders FOREIGN KEY (OrderId)
REFERENCES Orders3 (OrderId))
DISTRIBUTE BY REFERENCE (C1_orders);CREATE TABLE...AS SELECTの使用
この例では、customers表に基づいてNewCustomers表を作成します。主キー制約を定義することで、同じ分散スキームを保持し、データが主キーに基づいて分散されるようにします。
Command> CREATE TABLE NewCustomers(cust_id PRIMARY KEY, first_name, last_name,
addr1, addr2, zipcode, member_since) AS SELECT * FROM customers;
0 rows inserted.
Command> describe NewCustomers;
Table SAMPLEUSER.NEWCUSTOMERS:
Columns:
*CUST_ID NUMBER (10) NOT NULL
FIRST_NAME VARCHAR2 (30) INLINE NOT NULL
LAST_NAME VARCHAR2 (30) INLINE NOT NULL
ADDR1 VARCHAR2 (64) INLINE
ADDR2 VARCHAR2 (64) INLINE
ZIPCODE VARCHAR2 (5) INLINE
MEMBER_SINCE DATE NOT NULL
DISTRIBUTE BY HASH (CUST_ID)
1 table found.
(primary key columns are indicated with *)
ttIsql describeを実行して、元のcustomers表を表示します。
Command> describe Customers;
Table SAMPLEUSER.CUSTOMERS:
Columns:
*CUST_ID NUMBER (10) NOT NULL
FIRST_NAME VARCHAR2 (30) INLINE NOT NULL
LAST_NAME VARCHAR2 (30) INLINE NOT NULL
ADDR1 VARCHAR2 (64) INLINE
ADDR2 VARCHAR2 (64) INLINE
ZIPCODE VARCHAR2 (5) INLINE
MEMBER_SINCE DATE NOT NULL
DISTRIBUTE BY HASH (CUST_ID)
1 table found.
(primary key columns are indicated with *)CREATE TABLEのSQL構文: TimesTen Classic
PRIMARY KEYを、ColumnDefinition句とPRIMARY KEY句の両方で指定することはできません。
永続表の構文は、次のとおりです。
CREATE TABLE [Owner.]TableName ( {{ColumnDefinition} [,...] [PRIMARY KEY (ColumnName [,...]) | [[CONSTRAINT ForeignKeyName] FOREIGN KEY ([ColumnName] [,...]) REFERENCES RefTableName [(ColumnName [,...])] [ON DELETE CASCADE]] [...] } ) [ColumnBasedCompression] [UNIQUE HASH ON (HashColumnName [,...]) PAGES = PrimaryPages] [AGING {LRU| USE ColumnName LIFETIME Num1 {SECOND[S] | MINUTE[S] | HOUR[S] |DAY[S]} [CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}] }[ON|OFF] ] [AS SelectQuery]
グローバル一時表の構文は、次のとおりです。
CREATE GLOBAL TEMPORARY TABLE [Owner.]TableName ( {{ColumnDefinition} [,...] [PRIMARY KEY (ColumnName [,...]) | [[CONSTRAINT ForeignKeyName] FOREIGN KEY ([ColumnName] [,...]) REFERENCES RefTableName [(ColumnName [,...])] [ON DELETE CASCADE]] [...] } ) [UNIQUE HASH ON (HashColumnName [,...]) PAGES = PrimaryPages] [ON COMMIT { DELETE | PRESERVE } ROWS]
CREATE TABLEのパラメータ: TimesTen Classic
| パラメータ | 説明 |
|---|---|
|
|
新しい表に割り当てる名前です。2つの表に同じ所有者名と表名を指定することはできません。 所有者名を指定していない場合は、ログイン名が新しい表の所有者名になります。TimesTenの表の所有者は、ユーザーIDの設定またはログイン名によって決まります。Oracle Database表の所有者名は、TimesTen表の所有者名と常に一致させる必要があります。 名前を定義するためのルールについては、「基本名」を参照してください。 |
|
|
作成する表をグローバル一時表にします。一時表は永続表と類似していますが、接続で参照された場合にのみ効率的にマテリアライズされます。 グローバル一時表定義は永続的であり、すべての接続に対して表示されますが、表インスタンスは各接続に対してローカルです。表インスタンスは、表を参照するコマンドが接続に対してコンパイルされる場合に作成され、接続が切断されると削除されます。同じ一時表のすべてのインスタンスの名前は同じですが、表名と追加の接続IDに基づいて識別されます。グローバル一時表は、一時領域に割り当てられます。 グローバル一時表の内容は接続間で共有できません。各接続では、その接続の表の内容のみが表示され、一時表を参照するコンパイルされたコマンドは接続間で共有されません。
キャッシュ・グループ表は、一時表として定義できません。 一時表の変更は、XLAで追跡できません。 一時表の操作でログ・レコードが生成されます。生成されるログの量は、永続表用よりも少なくなります。 TRUNCATE TABLEは、グローバル一時表でサポートされていません。 ローカルの一時表は、サポートされていません。 グローバル一時表にアクセスするには、オブジェクト権限は必要ありません。 グローバル一時表には |
|
|
表の個々の列です。各表には、列が少なくとも1つ必要です。
|
|
|
表の列の名前。 主キー定義で名前が使用されている場合、名前は作成する表の主キーを形成します。主キーには最大16列を指定できます。外部キーの場合、
|
|
|
|
|
|
オプションのユーザー定義の名前を外部キーに指定します。ユーザーが指定しない場合は、システムによってデフォルトの名前が指定されます。 |
|
|
新しい表と 最初のリストの列は、新しい表の列であり、参照元列と呼ばれます。2番目のリストの列は、参照先の表の列であり、参照先列と呼ばれます。これら2つのリストは、長さ、精度、スケールを含めてデータ型が一致している必要があります。参照先の表には、参照先列に対する主キーまたは一意索引がすでに存在している必要があります。 参照先列の列名リストはオプションです。省略した場合、 外部キーを宣言することにより、参照元列に範囲索引が作成されます。参照先の表またはその参照先の索引は、参照元表を削除しないかぎり削除できません。 外部キー制約によって、新しい表の各行と参照先の表の行は、参照元列の内容と参照先列の内容が同じになるように一致させる必要があります。 TimesTenでは、SQL-92 外部キーはグローバル一時表で定義できますが、グローバル一時表の参照のみを行うことができます。親表が 外部キーは、アクティブな親表を参照できません。アクティブな親表とは、接続に対してマテリアライズされたインスタンスを持つ表のことです。
|
|
|
|
|
|
データをより効率的に格納する、列レベルでの圧縮を定義します。列での重複する値の冗長な格納を削除し、全表スキャンを実行するSQL問合せのパフォーマンスを向上させます。詳細は、「表の列ベースの圧縮(TimesTen Classic)」を参照してください。 |
|
|
|
|
|
表のハッシュ索引。このパラメータは、等価条件に使用します。 |
|
|
表に定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。
|
|
|
表の想定ページ数に基づいてハッシュ索引のサイズを設定します。
|
|
|
グローバル一時表を作成するトランザクションがコミットされるときに、行を削除するか、または保存するかを指定するオプションの文です。この文が指定されていない場合は、一時表の行が削除されます。 |
|
|
指定する場合、表のLRUエージング・ポリシーを定義します。LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態( エージング状態を LRU属性は、組込みプロシージャの |
|
|
指定する場合、表の時間ベースのエージング・ポリシーを定義します。時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態( エージング状態を 時間ベースのエージング属性はSQLレベルで定義され、 時間ベース・エージングに使用する列の名前として エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列は
AS 時間ベースのエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の「表へのエージング・ポリシーの実装」を参照してください。 |
|
|
時間の単位の概念がサポートされています。時間の単位に |
|
|
エージング状態が |
|
|
指定すると、 データ型およびデータ型の長さは、
|
列定義: TimesTen Classic
SQL構文
ENABLEキーワードは、CREATE TABLE文で列を定義する場合にのみ使用できます。
LOB以外のすべてのデータ型について、構文は次のとおりです。
ColumnName ColumnDataType [DEFAULT DefaultVal] [[NOT] INLINE] [PRIMARY KEY | UNIQUE | NULL [UNIQUE] | NOT NULL [ENABLE] [PRIMARY KEY | UNIQUE] ]
LOBデータ型の場合、LOB列に主キーまたは一意制約を作成できません。また、LOBデータ型は表外に格納されるため、INLINE属性を指定できません。
LOBデータ型は、TimesTen Scaleoutではサポートされていません。
すべてのLOBデータ型について、構文は次のとおりです。
ColumnName ColumnDataType [DEFAULT DefaultVal] [[NOT] NULL [ENABLE]] | [[NOT] NULL [ENABLE]] [DEFAULT DefaultVal]
パラメータ
列定義には、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
新しい表の列に割り当てる名前です。表の2つの列に同じ名前を指定することはできません。1つの表の列数は最大で1000です。
|
|
|
列に格納できるデータ型です。長さを指定する必要があるデータ型もあります。指定できるデータ型の詳細は、「データ型」を参照してください。
|
|
|
デフォルト値がユーザーのいずれかである場合、列のデータ型は
|
|
|
デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。
|
|
|
列に
|
|
|
列に
|
|
|
列に設定される一意制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。一意性を実現するために、TimesTenでは一意の範囲索引が作成されます。つまり、一意制約を持つ列は、制約を持たない列よりも多くのメモリーと時間を実行時に使用する可能性があります。
|
|
|
列に設定される一意の
|
CREATE TABLEの説明: TimesTen Classic
- 表にデータをロードしようとしている場合は、索引のない表の作成を検討してください。索引は、データのロード後に作成できます。これにより、表へのデータのロードにかかる時間が短縮されます。
-
主キーに保存されるすべての列は、
NOT NULLである必要があります。 -
ColumnDefinitionで指定されたPRIMARY KEYは、1つの列に対してのみ指定できます。 -
PRIMARYKEYを、ColumnDefinition句とPRIMARYKEY句の両方で指定することはできません。 -
主キーおよび外部キー制約において、制約列リストでの列名の重複は許可されません。
-
主キー列は、列を同じ値に更新する以外の更新はできません。
-
インライン列ではなくアウトライン列を定義する際にパフォーマンスに関して考慮する事項があります。
-
TimesTenは、アウトライン列を使用してデータを連続して格納しないため、データへのアクセスは遅くなります。
-
TimesTenは、より多くのロギング操作を生成するため、データの移入が遅くなります。
-
TimesTenは、より多くの再利用操作およびロギング操作を実行するため、データの削除が遅くなります。
-
列を保存するとオーバーヘッドが少なくなります。
-
-
子表の外部キー制約で
ON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。 -
ON DELETE CASCADEトリガー・アクションを変更するには、外部キー制約を削除して再定義してください。 -
キャッシュ表を参照する外部キーを持つ表は作成できません。
-
UNIQUE列制約およびデフォルトの列の値は、マテリアライズド・ビューではサポートされていません。 -
表の主キーで使用する索引を変更するには、
ALTER TABLE文を使用します。 -
ASSelectQuery句を指定する場合:-
データ型およびデータ型の長さは、
SelectQueryから導出されます。作成する表の列にデータ型を指定しないでください。 -
SelectQueryで列を含む式ではなく列が選択された場合、TimesTenでは、新しい表の列に対して、選択された表の対応する列に明示的に作成されていたNOT NULL制約を定義します。 -
選択された表の列(主キーなど)でTimesTenにより暗黙的に作成されていた
NOT NULL制約は、新しい表に引き継がれます。選択した表のNOT NULL制約を無効にするには、新しい列をNULLとして定義します。次に例を示します:CREATE TABLE newtable (newcol NULL) AS SELECT (col) FROM tab;
-
NOT INLINE/INLINE属性は新しい表に引き継がれます。 -
一意キー、外部キー、索引および列のデフォルト値は、新しい表に引き継がれません。
-
SelectQueryのすべての式が式ではなく列である場合は、作成する表から列を省略できます。この場合、列の名前はSelectQueryの列と同じです。SelectQueryに単純な列参照ではなく式が含まれている場合は、列の別名を指定するか、またはCREATE TABLE文で列に名前を付けます。 -
作成する表に対して外部キーを指定しないでください。
-
SelectQueryでSELECT FOR UPDATEを指定しないでください。 -
ASSelectQuery句を使用する場合、ORDER BY句はサポートされません。 -
SelectQueryに集合演算子UNION、MINUSおよびINTERSECTを含めることはできません。 -
レプリケートされた環境では、次のことに注意してください。
グローバル一時表を含む新しい表の作成時に表をアクティブ・スタンバイ・ペアに含めるには、アクティブ・データベースで
CREATE TABLE文を実行する前に、DDL_REPLICATION_LEVELを2以上に設定し、DDL_REPLICATION_ACTIONをINCLUDEに設定します。この構成では、表はアクティブ・スタンバイ・ペアに含まれ、レプリケーション・スキームのすべてのデータベースにレプリケートされます。DDL_REPLICATION_ACTIONをEXCLUDEに設定した場合、新しい表は、アクティブ・スタンバイ・ペアに含まれませんが、レプリケーション・スキームのすべてのデータベースにレプリケートされます。表はレプリケーション・スキームの一部にはならないため、その表で発行されたDMLはレプリケートされません。表に対してDMLレプリケーションを有効にするには、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE文を実行して、表を含める必要があります。この場合、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLEを実行すると表の内容は切り捨てられるため、この文を実行する前に、表は空であり、すべてのデータベースに存在している必要があります。詳細は、「ALTER SESSION」を参照してください。
-
-
デフォルトでは、主キーを実現するために、範囲索引が作成されます。主キーに対してハッシュ索引を指定するには、
UNIQUE HASH句を使用してください。-
アプリケーションで表の主キーを使用して範囲問合せを実行する場合は、
UNIQUE HASH句を省略して、その表に対して範囲索引を選択してください。 -
主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、
UNIQUE HASH句を指定します。
-
-
ハッシュ索引は、表が存在している間、
ALTER TABLE文を使用してハッシュ索引がサイズ変更されるまで、または索引が削除されて再作成されるまで変更されない固定のサイズで作成されます。小さいハッシュ索引ほどハッシュの衝突が増えます。大きいハッシュ索引ほど衝突が少なくなりますが、メモリを消費しやすくなります。ハッシュ・キー比較は高速な操作であるため、少数のハッシュ衝突がTimesTenにパフォーマンスの問題を発生させることはありません。ハッシュ索引のサイズが適性に設定されていることを確認するには、
SETPAGES句のRowPagesパラメータの値により、アプリケーションで表の想定サイズを示す必要があります。この値は、表の想定行数を256で除算して計算します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。 -
ハッシュ・キーには、最大16列を指定できます。
-
ON DELETE CASCADEは、マテリアライズド・ビューのディテール表でサポートされています。子表に対して定義されたマテリアライズド・ビューがある場合、親表からの削除によって子表でカスケード削除が行われます。つまり、親表での削除により、マテリアライズド・ビューも変更されます。 -
DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。 -
ON DELETE CASCADE: 親表から子表へのパスが異なる場合があるため、次のルールが適用されます。-
親表から子表へのすべてのパスを、deleteパスかdo not deleteパスのいずれかに統一します。deleteパスのすべての子表で
ON DELETE CASCADEを指定します。 -
このルールは、1つの親表から複数の子表へ、または複数の親表から1つの子表へのパスには適用されません。
-
-
ON DELETE CASCADEには、次の規則も適用されます。-
ある表にdeleteパスでアクセスする場合、その表のすべての子表にもdeleteパスでアクセスします。
-
-
レプリケーションを含む
ON DELETE CASCADE: 次の制限が適用されます。-
ON DELETE CASCADEで指定された外部キーは、レプリケートされた表のマスターとサブスクライバの間で一致している必要があります。これは実行時に確認されます。エラーが発生すると、RECEIVERスレッドは処理を停止します。 -
カスケード削除のツリーに含まれる表をレプリケートする場合は、ツリーに含まれるすべての表をレプリケートする必要があります。この制限は、レプリケーション・スキームを作成したとき、またはレプリケーション表のいずれかに
ON DELETE CASCADE付きの外部キーを追加したときにチェックされます。エラーが検出されると、処理は中断します。外部キー制約を変更する前に、まずレプリケーション・スキームを削除することが必要になる場合があります。 -
レプリケートされた表で外部キーの追加や削除を行う前に、レプリケーション・エージェントを停止する必要があります。
-
-
グローバル一時表のデータは現在の接続専用となり、ユーザー間で保護する必要はありません。このため、グローバル一時表にオブジェクト権限は必要ありません。
-
表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。
-
エージング・ポリシーは、エージング状態を変更するように定義する必要があります。
-
時間ベースのエージング・ポリシーの場合、エージング列を追加または変更できません。これは、
NOT NULL列を追加または変更できないためです。 -
1つのシステムでLRUエージングと時間ベースのエージングの両方を組み合せて使用できます。LRUエージングのみを使用する場合、エージング・スレッドはデータベース全体に指定されたサイクルに基づいて起動します。一方、時間ベースのエージングのみを使用する場合、エージング・スレッドは最適な頻度に基づいて起動します。この頻度は、すべての表の
CYCLE句に指定された値によって決定されます。LRUエージングと時間ベースのエージングの両方を使用する場合は、両方のタイプを組み合せて考慮した上でスレッドが起動します。 -
LRUエージングでは、行がアクセスされているかまたは参照されているかどうかを、次のルールで判断します。
-
SELECT文の結果セットを構築するために使用された行。 -
INSERT ... SELECT文の結果セットを構築するために使用された行。 -
更新または削除対象の行。
-
-
コマンドで参照される表に対してLRUエージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。
-
エージング状態にかかわらずエージング処理をすぐにスケジュールするには、
ttAgingScheduleNowプロシージャをコールします。 -
エージングの制限:
-
LRUエージングと時間ベースのエージングは、マテリアライズド・ビューのディテール表ではサポートされていません。
-
LRUエージングと時間ベースのエージングは、グローバル一時表ではサポートされていません。
-
時間ベースのエージングに使用されている列は削除できません。
-
エージング・ポリシーとエージング状態は、すべてのレプリケーション・サイトで同じである必要があります。
-
外部キーによって関連付けられている表には、同じエージング・ポリシーを設定する必要があります。
-
LRUエージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。
ON DELETE CASCADEの設定は無視されます。 -
時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。
ON DELETE CASCADEは、設定の有無にかかわらず無視されます。
-
表の列ベースの圧縮(TimesTen Classic)
データをより効率的に格納する列レベルで表を圧縮できます。これは、列での重複する値の冗長な格納を削除し、全表スキャンを実行するSQL問合せのパフォーマンスを向上させます。
表の圧縮される1つ以上の列(圧縮列グループと呼ばれる)を定義できます。各表に1つ以上の圧縮列グループを定義できます。
各圧縮列グループに対して、圧縮列グループのすべての個別値の列を含むディクショナリ表が作成されます。圧縮列グループには、ディクショナリ表の適切な値の行へのポインタが含まれます。このポインタの幅は、ディクショナリ表に対して定義した最大エントリ数に応じて、1、2または4バイトです。そのため、圧縮されている列グループ内の列の幅の合計が、1、2または4バイトのポインタの幅より広い場合、およびこれらの列値に多くの重複する値が存在する場合は、表で使用される領域を削減しました。
図6-1に、ディクショナリ表の適切な行を指している、表の圧縮列グループを示します。
ディクショナリ表には、各個別値へのポインタの列があります。ユーザーが圧縮列グループの個別エントリの最大数を構成すると、圧縮列グループのサイズが次のように設定されます。
-
エントリの最大数が255(28-1)の場合は1バイト。最大数が1から255の場合、ディクショナリのサイズは255(28-1)に設定され、圧縮列グループのポインタ列は1バイトになります。
-
エントリの最大数が65,535(216-1)の場合は2バイト。最大数が256から65,535の場合、ディクショナリのサイズは65,535(216-1)に設定され、圧縮列グループのポインタ列は2バイトになります。
-
エントリの最大数が4,294,967,295(232-1)の場合は4バイト。最大数が65,536から4,294,967,295の場合、ディクショナリのサイズは4,294,967,295(232-1)に設定され、圧縮列グループのポインタ列は4バイトになります。これがデフォルトです。
構文: 列ベースの圧縮(TimesTen Classic)
ColumnBasedCompressionの構文は、次のとおりです。
[COMPRESS (CompressColumns [,...])]
CompressColumnsの構文は次のとおりです。
{ColumnDefinition | (ColumnDefinition [,...])} BY DICTIONARY
[MAXVALUES = CompressMax]パラメータ
ColumnBasedCompression構文には、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
圧縮が有効な表について圧縮列グループを定義します。表の1つ以上の列を含めることができます。ただし、1つの列は1つの圧縮列グループにのみ含めることができます。 圧縮列グループで複数の列を指定する場合、 各圧縮列グループは、最大16列に制限されます。 |
|
|
各圧縮列グループの圧縮ディクショナリを定義します。 |
|
|
ディクショナリ表の場合、
MAXVALUES句を省略した場合の最大サイズのデフォルトは2 |
説明: 列ベースの圧縮(TimesTen Classic)
-
圧縮列グループは、表の作成時に追加するか、
ALTER TABLE文を使用して後で追加できます。ALTER TABLE文を使用して、圧縮列グループを削除できますが、グループ全体を削除する必要があります。 -
表のすべての列および個別の圧縮列グループに存在する列に索引を作成できます。ただし、一意の列または単一列主キーに単一列圧縮グループを作成することはできません。すべての索引または主キーが同じ圧縮グループに存在する場合も、一意の索引または主キーを作成することはできません。
-
LOB列は圧縮できません。
-
レプリケートされた表、キャッシュ・グループ表またはグローバル一時表の列では、圧縮はサポートされません。
CREATE TABLE AS SELECT文を使用し、その文でその表に対して列ベースの圧縮を定義すると、表を作成できません。 -
圧縮が有効な表では、マテリアライズド・ビューを作成できません。
-
列ベースの圧縮は、TimesTen Scaleoutではサポートされていません。
例: TimesTen Classic
範囲索引がpartnumberに対して作成されます(主キーであるため)。
Command> CREATE TABLE price
(partnumber INTEGER NOT NULL PRIMARY KEY,
vendornumber INTEGER NOT NULL,
vendpartnum CHAR(20) NOT NULL,
unitprice DECIMAL(10,2),
deliverydays SMALLINT,
discountqty SMALLINT);
Command> INDEXES price;
Indexes on table SAMPLEUSER.PRICE:
PRICE: unique range index on columns:
PARTNUMBER
1 index found.
1 index found on 1 table.
ハッシュ索引は、主キーであるclubname列に作成されます。
CREATE TABLE recreation.clubs (clubname CHAR(15) NOT NULL PRIMARY KEY, clubphone SMALLINT, activity CHAR(18)) UNIQUE HASH ON (clubname) PAGES = 30;
範囲索引は、membernameおよびclubの2つの列で作成されます(ともに主キーであるため)。
Command> CREATE TABLE recreation.members (membername CHAR(20) NOT NULL, club CHAR(15) NOT NULL, memberphone SMALLINT, PRIMARY KEY (membername, club)); Command> INDEXES recreation.members; Indexes on table RECREATION.MEMBERS: MEMBERS: unique range index on columns: MEMBERNAME CLUB 1 index found on 1 table.
recreation.events表にはハッシュ索引は作成されません。
CREATE TABLE recreation.events (sponsorclub CHAR(15), event CHAR(30), coordinator CHAR(20), results VARBINARY(10000));
ハッシュ索引は、vendornumber列に作成されます。
CREATE TABLE purchasing.vendors (vendornumber INTEGER NOT NULL PRIMARY KEY, vendorname CHAR(30) NOT NULL, contactname CHAR(30), phonenumber CHAR(15), vendorstreet CHAR(30) NOT NULL, vendorcity CHAR(20) NOT NULL, vendorstate CHAR(2) NOT NULL, vendorzipcode CHAR(10) NOT NULL, vendorremarks VARCHAR(60)) UNIQUE HASH ON (vendornumber) PAGES = 101;
ハッシュ索引は、membername列およびclub列で作成されます(ともに主キーであるため)。
CREATE TABLE recreation.members (membername CHAR(20) NOT NULL, club CHAR(15) NOT NULL, memberphone SMALLINT, PRIMARY KEY (membername, club)) UNIQUE HASH ON (membername, club) PAGES = 100;
ハッシュ索引は、firstname列およびlastname列に作成されます(ともにauthors表の主キーであるため)。外部キーは、authors表の主キーを参照するbooks表のauthorfirstnameとauthorlastname列に作成されます。
CREATE TABLE authors (firstname VARCHAR(255) NOT NULL, lastname VARCHAR(255) NOT NULL, description VARCHAR(2000), PRIMARY KEY (firstname, lastname)) UNIQUE HASH ON (firstname, lastname) PAGES=20; CREATE TABLE books (title VARCHAR(100), authorfirstname VARCHAR(255), authorlastname VARCHAR(255), price DECIMAL(5,2), FOREIGN KEY (authorfirstname, authorlastname) REFERENCES authors(firstname, lastname));
次の文では、VARCHAR列のデフォルト文字を上書きし、1つのVARCHAR (10)列がNOT INLINEで、1つのVARCHAR (144)がINLINEである表が作成されます。
CREATE TABLE t1 (c1 VARCHAR(10) NOT INLINE NOT NULL, c2 VARCHAR(144) INLINE NOT NULL);
次の文では、本のタイトルのUNIQUE列を持つ表が作成されます。
CREATE TABLE books (title VARCHAR(100) UNIQUE, authorfirstname VARCHAR(255), authorlastname VARCHAR(255), price DECIMAL(5,2), FOREIGN KEY (authorfirstname, authorlastname) REFERENCES authors(firstname, lastname));
次の文では、列x1のデフォルト値が1で、列dのデフォルト値がSYSDATEである表が作成されます。
CREATE TABLE t1 (x1 INT DEFAULT 1, d TIMESTAMP DEFAULT SYSDATE);
この例では、rangex表を作成し、主キーとしてcol1を定義します。デフォルトで範囲索引が作成されます。
Command> CREATE TABLE rangex (col1 TT_INTEGER PRIMARY KEY); Command> INDEXES rangex; Indexes on table SAMPLEUSER.RANGEX: RANGEX: unique range index on columns: COL1 1 index found 1 index found on 1 table.
次の文は、HRスキーマの親表および子表におけるON DELETE CASCADE句の使用を示しています。外部キーを持つ表は、ON DELETE CASCADEが有効になるように変更されています。
ALTER TABLE countries ADD CONSTRAINT countr_reg_fk FOREIGN KEY (region_id) REFERENCES regions(region_id) ON DELETE CASCADE; ALTER TABLE locations ADD CONSTRAINT loc_c_id_fk FOREIGN KEY (country_id) REFERENCES countries(country_id) ON DELETE CASCADE; ALTER TABLE departments ADD CONSTRAINT dept_loc_fk FOREIGN KEY (location_id) REFERENCES locations (location_id) ON DELETE CASCADE; ALTER TABLE employees ADD CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments ON DELETE CASCADE; ALTER TABLE employees ADD CONSTRAINT emp_job_fk FOREIGN KEY (job_id) REFERENCES jobs (job_id); ALTER TABLE job_history ADD CONSTRAINT jhist_job_fk FOREIGN KEY (job_id) REFERENCES jobs; ALTER TABLE job_history ADD CONSTRAINT jhist_emp_fk FOREIGN KEY (employee_id) REFERENCES employees ON DELETE CASCADE; ALTER TABLE job_history ADD CONSTRAINT jhist_dept_fk FOREIGN KEY (department_id) REFERENCES departments ON DELETE CASCADE; ;
この例は、エージングにおいて、時間の単位がどのように機能するかを示しています。
存続時間が3 Daysの場合(単位はDay):
-
(SYSDATE -ColumnValue) <= 3の場合、エージ・アウトされません。 -
(SYSDATE -ColumnValue) > 3の場合、行はエージ・アウトの対象になります。 -
(SYSDATE -ColumnValue) = 3 days, 22 hoursの場合、存続期間を3 Daysに指定すると、行はエージ・アウトされません。存続期間が72 Hoursと指定されていた場合は、行はエージ・アウトされます。
この例では、LRUエージングを使用して表を作成します。エージング状態は、デフォルトでONになっています。
CREATE TABLE agingdemo (agingid NUMBER NOT NULL PRIMARY KEY, name VARCHAR2 (20) ) AGING LRU; Command> DESCRIBE agingdemo; Table USER.AGINGDEMO: Columns: *AGINGID NUMBER NOT NULL NAME VARCHAR2 (20) INLINE AGING LRU ON 1 table found. (primary key columns are indicated with *)
この例では、時間ベースのエージングを使用する表を作成します。存続期間は3 Daysです。サイクルは指定されていないため、デフォルトで5分です。エージング状態はOFFです。
CREATE TABLE agingdemo2 (agingid NUMBER NOT NULL PRIMARY KEY, name VARCHAR2 (20), agingcolumn TIMESTAMP NOT NULL ) AGING USE agingcolumn LIFETIME 3 DAYS OFF; Command> DESCRIBE agingdemo2; Table USER.AGINGDEMO2: Columns: *AGINGID NUMBER NOT NULL NAME VARCHAR2 (20) INLINE AGINGCOLUMN TIMESTAMP (6) NOT NULL Aging use AGINGCOLUMN lifetime 3 days cycle 5 minutes off 1 table found. (primary key columns are indicated with *)
この例では、エラー・メッセージが生成されます。これは、エージング・ポリシーを一度作成すると、変更できないことを示しています。エージングを削除して、再定義する必要があります。
CREATE TABLE agingdemo2 (agingid NUMBER NOT NULL PRIMARY KEY, name VARCHAR2 (20), agingcolumn TIMESTAMP NOT NULL ) AGING USE agingcolumn LIFETIME 3 DAYS OFF; ALTER TABLE agingdemo2 ADD AGING LRU; 2980: Cannot add aging policy to a table with an existing aging policy. Have to drop the old aging first The command failed. DROP aging on the table and redefine with LRU aging. ALTER TABLE agingdemo2 DROP AGING; ALTER TABLE agingdemo2 ADD AGING LRU; Command> DESCRIBE agingdemo2; Table USER.AGINGDEMO2: Columns: *AGINGID NUMBER NOT NULL NAME VARCHAR2 (20) INLINE AGINGCOLUMN TIMESTAMP (6) NOT NULL Aging lru on 1 table found. (primary key columns are indicated with *)
時間ベースのエージングを指定して表を作成してみます。TT_DATEデータ型と3時間のLIFETIMEを指定してエージング列を定義します。LIFETIME単位はDAYSで指定する必要があるため、エラーが生成されます。
Command> CREATE TABLE aging1 (col1 TT_INTEGER PRIMARY KEY, col2 TT_DATE NOT NULL) AGING USE col2 LIFETIME 3 HOURS; 2977: Only DAY lifetime unit is allowed with a TT_DATE column The command failed.
AS SelectQuery句を使用して、表empを作成します。employees表から、employee_idが100から105までのlast_nameを選択します。empに6行が挿入されたことが示されます。返される必要のある行を確認するために、最初にSELECT文を発行します。
Command> SELECT last_name FROM employees WHERE employee_id BETWEEN 100 AND 105; < King > < Kochhar > < De Haan > < Hunold > < Ernst > < Austin > 6 rows found. Command> CREATE TABLE emp AS SELECT last_name FROM employees WHERE employee_id BETWEEN 100 AND 105; 6 rows inserted. Command> SELECT * FROM emp; < King > < Kochhar > < De Haan > < Hunold > < Ernst > < Austin > 6 rows found.
AS SelectQueryを使用して、表totalsalを作成します。salaryを合計して、結果をtotalsalaryに挿入します。SelectQuery式の別名sを定義します。
Command> CREATE TABLE totalsal AS SELECT SUM (salary) s FROM employees; 1 row inserted. Command> SELECT * FROM totalsal; < 691400 > 1 row found.
AS SelectQueryを使用して、commission_pct列で定義された表を作成します。デフォルト値を.3に設定します。最初に、commission_pct列がNUMBER (2,2)型であることを示すためにemployees表にDESCRIBEを実行します。c_pct表のcommission_pct列は、employees表のcommission_pct列からNUMBER (2,2)型を継承します。
Command> DESCRIBE employees; Table SAMPLEUSER.EMPLOYEES: Columns: *EMPLOYEE_ID NUMBER (6) NOT NULL FIRST_NAME VARCHAR2 (20) INLINE LAST_NAME VARCHAR2 (25) INLINE NOT NULL EMAIL VARCHAR2 (25) INLINE UNIQUE NOT NULL PHONE_NUMBER VARCHAR2 (20) INLINE HIRE_DATE DATE NOT NULL JOB_ID VARCHAR2 (10) INLINE NOT NULL SALARY NUMBER (8,2) COMMISSION_PCT NUMBER (2,2) MANAGER_ID NUMBER (6) DEPARTMENT_ID NUMBER (4) 1 table found. (primary key columns are indicated with *) Command> CREATE TABLE c_pct (commission_pct DEFAULT .3) AS SELECT commission_pct FROM employees; 107 rows inserted. Command> DESCRIBE c_pct; Table SAMPLEUSER.C_PCT: Columns: COMMISSION_PCT NUMBER (2,2) DEFAULT .3 1 table found. (primary key columns are indicated with *)
次の例では、job_idが圧縮されたemployees表を作成します。
Command> CREATE TABLE EMPLOYEES
(EMPLOYEE_ID NUMBER (6) PRIMARY KEY,
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25) NOT NULL,
EMAIL VARCHAR2(25) NOT NULL,
PHONE_NUMBER VARCHAR2(20),
HIRE_DATE DATE NOT NULL,
JOB_ID VARCHAR2(10) NOT NULL,
SALARY NUMBER (8,2),
COMMISSION_PCT NUMBER (2,2),
MANAGER_ID NUMBER(6),
DEPARTMENT_ID NUMBER(4))
COMPRESS (JOB_ID BY DICTIONARY);
Command> DESCRIBE EMPLOYEES;
Table MYSCHEMA.EMPLOYEES:
Columns:
*EMPLOYEE_ID NUMBER (6) NOT NULL
FIRST_NAME VARCHAR2 (20) INLINE
LAST_NAME VARCHAR2 (25) INLINE NOT NULL
EMAIL VARCHAR2 (25) INLINE NOT NULL
PHONE_NUMBER VARCHAR2 (20) INLINE
HIRE_DATE DATE NOT NULL
JOB_ID VARCHAR2 (10) INLINE NOT NULL
SALARY NUMBER (8,2)
COMMISSION_PCT NUMBER (2,2)
MANAGER_ID NUMBER (6)
DEPARTMENT_ID NUMBER (4)
COMPRESS ( JOB_ID BY DICTIONARY )
1 table found.
(primary key columns are indicated with *)
次の例では、ディクショナリ表に3つのサイズがあることを示します。エントリの最大数に指定した値は、次のサイズに丸められます。たとえば、役職IDの最大数として400を指定すると、最大で65535エントリのディクショナリ表が作成されます。デフォルトのサイズである232-1は、DESCRIBEの出力に表示されません。
Command> CREATE TABLE employees
(employee_id NUMBER(6) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(25),
email VARCHAR2(25) NOT NULL,
job_id VARCHAR2(10) NOT NULL,
manager_id NUMBER(6),
department_id NUMBER(4))
COMPRESS (last_name BY DICTIONARY MAXVALUES=70000,
job_id BY DICTIONARY MAXVALUES=400,
department_id BY DICTIONARY MAXVALUES=100);
Command> DESCRIBE employees;
Table MYSCHEMA.EMPLOYEES:
Columns:
*EMPLOYEE_ID NUMBER (6) NOT NULL
FIRST_NAME VARCHAR2 (20) INLINE
LAST_NAME VARCHAR2 (25) INLINE
EMAILS VARCHAR2 (25) INLINE NOT NULL
JOB_ID VARCHAR2 (10) INLINE NOT NULL
MANAGER_ID NUMBER (6)
DEPARTMENT_ID NUMBER (4)
COMPRESS ( LAST_NAME BY DICTIONARY,
JOB_ID BY DICTIONARY MAXVALUES=65535,
DEPARTMENT_ID BY DICTIONARY MAXVALUES=255 )
1 table found.
(primary key columns are indicated with *)