必要な権限
CREATE TABLE(所有者の場合)またはCREATE ANY TABLE(非所有者の場合)。
作成された表の所有者には、REFERENCE句によって参照される表に対するREFERENCES権限が必要です。
SQL構文
永続表の構文は、次のとおりです。
CREATE TABLE [Owner.]TableName ( {{ColumnDefinition} [,...] [PRIMARY KEY (ColumnName [,...]) | [[CONSTRAINT ForeignKeyName] FOREIGN KEY ([ColumnName] [,...]) REFERENCES RefTableName [(ColumnName [,...])] [ON DELETE CASCADE]] [...] } ) [UNIQUE HASH ON (HashColumnName [,...]) PAGES = PrimaryPages] [AGING {LRU| USE ColumnName LIFETIME Num1 {MINUTE[S] | HOUR[S] |DAY[S]} [CYCLE Num2 {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文には、次のパラメータがあります。
パラメータ | 説明 |
---|---|
[ Owner .] TableName |
新しい表に割り当てる名前です。2つの表に同じ所有者名と表名を指定することはできません。
所有者名を指定していない場合は、ログイン名が新しい表の所有者名になります。TimesTenの表の所有者は、ユーザーIDの設定またはログイン名によって決まります。Oracle表の所有者名は、TimesTen表の所有者名と常に一致させる必要があります。 名前作成の規則については、「基本名」を参照してください。 |
GLOBAL TEMPORARY |
作成する表を一時表にします。一時表は永続表と類似していますが、接続で参照された場合にのみ効率的にマテリアライズされます。
グローバル一時表定義は永続的であり、すべての接続に対して表示されますが、表インスタンスは各接続に対してローカルです。表インスタンスは、表を参照するコマンドが接続に対してコンパイルされる場合に作成され、接続が切断されると削除されます。同じ一時表のすべてのインスタンスの名前は同じですが、表名と追加の接続IDに基づいて識別されます。グローバル一時表は、一時領域に割り当てられます。 一時表の内容は接続間で共有できません。各接続では、その接続の表の内容のみが表示され、一時表を参照するコンパイルされたコマンドは接続間で共有されません。 一時表は、キャッシュ・グループまたはレプリケーション・スキームの一部として使用できません。一時表は、DATASTOREレベルのレプリケーションが定義されるときに自動的に除外されます。 キャッシュ・グループ表は、一時表として定義できません。 一時表の変更は、XLAで追跡できません。 一時表の操作でログ・レコードが生成されます。 生成されるログの量は、永続表用よりも少なくなります。 TRUNCATE TABLEは、グローバル一時表でサポートされていません。 ローカルの一時表は、サポートされていません。 グローバル一時表にアクセスするには、オブジェクト権限は必要ありません。 グローバル一時表には |
ColumnDefinition |
表の個々の列です。 各表には、列が少なくとも1つ必要です。 詳細は、「列定義」を参照してください。
|
ColumnName |
作成される表の主キー列の名前を指定します。 主キーには最大16列を指定できます。外部キーでは、ColumnName はオプションです。 外部キーが指定されていない場合は、親表の主キーを参照します。
|
PRIMARY KEY |
PRIMARY KEY は、表定義で一度だけ指定できます。これによって、1つ以上の列が表の主キーを構成していることを示します。主キーの内容は一意かつNOT NULLである必要があります。 列には、UNIQUEと単一列PRIMARY KEYの両方を指定することはできません。 |
CONSTRAINT ForeignKeyName |
オプションのユーザー定義の名前を外部キーに指定します。ユーザーが指定しない場合は、システムによってデフォルトの名前が指定されます。 |
FOREIGN KEY |
新しい表とRefTableName によって識別される参照先の表の間で外部キー制約を指定します。外部キー制約で指定される列には、2つのリストがあります。
最初のリストには新しい表の列を指定します。この列は参照元列と呼ばれます。2番目のリストには参照先の表の列を指定します。この列は参照先列と呼ばれます。これらの2つのリストのデータ型は、長さ、精度、スケールなどが同じである必要があります。参照先の表の参照先列には、あらかじめ主キーまたは一意索引を作成しておく必要があります。 参照先列の列名リストはオプションです。省略した場合、 外部キーを宣言することにより、参照元列に範囲索引が作成されます。参照先の表またはその参照先の索引は、参照元表を削除しないかぎり削除できません。 外部キー制約によって、新しい表の各行と参照先の表の行は、参照元列の内容と参照先列の内容が同じになるように一致させる必要があります。 INSERT、DELETEまたはUPDATE文が制約に違反した場合、TimesTenエラー3001が返されます。 TimesTenでは、SQL-92 NO ACTIONの更新および削除規則とON DELETE CASCADEがサポートされています。外部キー制約は遅延可能ではありません。 外部キーはグローバル一時表で定義できますが、グローバル一時表の参照のみを行うことができます。親表がCOMMIT DELETEを使用して定義されている場合は、子表にもCOMMIT DELETE属性が必要です。 外部キーは、アクティブな親表を参照できません。アクティブな親表とは、接続に対してマテリアライズされたインスタンスを持つ表のことです。
|
[ON DELETE CASCADE] |
ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。 |
UNIQUE |
UNIQUE 列の各行の値が一意である必要があることを示します。 |
UNIQUE HASH ON |
表のハッシュ索引です。一意のハッシュ索引のみが作成されます。このパラメータは、等価条件に使用します。 UNIQUE HASH ON を指定するには、主キーの定義が必要です。 |
HashColumnName |
表に定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。
|
PrimaryPages |
表の想定ページ数を指定します。 この数値に基づいて、表のハッシュ索引に割り当てられるバケットの数が決まります。最小値は1です。想定したページ数が少なすぎると、パフォーマンスが低下します。 |
[ON COMMIT {DELETE|PRESERVE} ROWS] |
グローバル一時表を作成するトランザクションがコミットされるときに、行を削除するか、または保存するかを指定するオプションの文です。この文が指定されていない場合は、一時表の行が削除されます。 |
[AGING LRU [ON|OFF]] |
指定する場合、表のLRUエージング・ポリシーを定義します。LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態(ONまたはOFF)およびLRUエージング属性を定義します。
エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。 LRU属性はプロシージャ LRUエージングについては、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表のエージングの実装に関する説明を参照してください。 |
[AGING USE ColumnName ... [ON|OFF]] |
指定する場合、表の時間ベースのエージング・ポリシーを定義します。時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ONまたはOFF)および時間ベースのエージング属性を定義します。
エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。 時間ベースのエージング属性はSQLレベルで定義され、LIFETIME句およびCYCLE句で指定します。 時間ベース・エージングに使用する列の名前として エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列はNULLにはできません)。 TT_TIMESTAMPデータ型またはTT_DATEデータ型を使用してエージング列を定義できます。TT_DATEデータ型を選択する場合は、LIFETIME単位としてDAYSを指定する必要があります。 AS 時間ベースのエージングについては、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表のエージングの実装に関する説明を参照してください。 |
LIFETIME Num1 {MINUTE[S]|HOUR[S]| DAY[S] |
LIFETIMEは時間ベースのエージング属性で、必須の句です。
AGING USE LIFETIME句には、データがキャッシュに保持されることが保証される時間を指定します。
時間の単位の概念がサポートされています。時間の単位にDAYSを指定した場合、タイムスタンプの日付が同じ日になっているすべての行が同時にエージ・アウトされます。また、HOURSを時間の単位に指定した場合は、タイムスタンプ値の時間が同じ行が、すべて同時にエージ・アウトされます。LIFETIMEの3 DAYSは、LIFETIMEの72 HOURS(3×24)やLIFETIMEの432 MINUTES(3×24×60)とは異なります。 |
[CYCLE Num2 {MINUTE[S] |HOUR[S] | DAY[S]}] |
CYCLEは時間ベースのエージング属性で、オプションです。LIFETIME句の後にCYCLE句を指定します。
CYCLE句は、データが指定したLIFETIME値を超えているかどうか、その結果エージ・アウト(削除)する必要があるかどうかを確認するために、システムで行をチェックする頻度を指定します。
CYCLE句を指定しない場合、デフォルト値は5分です。 エージング状態がOFFの場合、エージングは自動的に実行されず、CYCLE句は無視されます。 |
AS SelectQuery |
指定されている場合、SelectQuery の結果セットの内容から新しい表が作成されます。 SelectQuery で返される行が表に挿入されます。
データ型およびデータ型の長さは、
|
SQL構文
ColumnName ColumnDataType [DEFAULT DefaultVal] [[NOT] INLINE] [PRIMARY KEY | UNIQUE | NULL [UNIQUE] | NOT NULL [PRIMARY KEY | UNIQUE] ]
パラメータ
列定義には、次のパラメータがあります。
パラメータ | 説明 |
---|---|
ColumnName |
新しい表の列に割り当てる名前です。表の2つの列に同じ名前を指定することはできません。 表には最大255の列を定義できます。
|
DEFAULT DefaultVal |
INSERT文で列の値が指定されていない場合、デフォルト値DefaultVal を列に挿入します。 指定されたデフォルト値は、列のデータ型と互換性がある型である必要があります。デフォルト値には、関連付けられた列で許可されている任意のデータ型を指定できます。
デフォルト値がユーザーのいずれかである場合、列のデータ型はCHARまたはVARCHAR2のいずれかであり、列の幅は30文字以上である必要があります。
|
ColumnDataType |
列に格納できるデータ型です。長さを指定する必要があるデータ型もあります。指定できるデータ型の詳細は、第1章「データ型」を参照してください。
|
INLINE| NOT INLINE |
デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。
|
NULL |
列にNULL値を含めることができます。
|
NOT NULL |
列にNULL値を含めることはできません。NOT NULLを指定した場合、列にNULL値を保存しようとする文はすべて拒否されます。
|
UNIQUE |
列に設定される一意制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。 一意性を実現するために、TimesTenでは一意の範囲索引が作成されます。これは、一意制約を持つ列は、制約を持たない列よりも多くのメモリーと時間を実行時に使用する可能性があることを意味します。PRIMARY KEYとともに使用することはできません。
|
PRIMARY KEY |
列に設定される一意のNOT NULL制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。また、UNIQUEとともに使用することはできません。
|
TimesTenでは、1つの表につき1つのハッシュ索引がサポートされています。 ハッシュ索引は、表の主キーに対して定義します。
デフォルトでは、主キーを実現するために、範囲索引が作成されます。主キーに対してハッシュ索引を指定するには、UNIQUE HASH句を使用してください。
アプリケーションで表の主キーを使用して範囲問合せを実行する場合は、UNIQUE HASH句を省略して、その表に対して範囲索引を選択してください。
主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、UNIQUE HASH句を指定します。
表の主キーで使用する索引を変更するには、ALTER TABLE文を使用します。
ハッシュ索引は、一定数のバケットで生成されます。バケットの数は、ALTER TABLE文を使用してハッシュ索引のサイズが変更されないかぎり、表の存続期間中は一定に保たれます。 ハッシュ索引のバケット数が少ないと、ハッシュの衝突が発生しやすくなります。バケットの数を増やすと衝突は減少しますが、より多くのメモリーを消費します。ハッシュ・キーの比較は高速で実行されるため、少数のハッシュの衝突がTimesTenのパフォーマンスに影響することはありません。
バケットの数は、PAGES値から生成される表のカーディナリティの最大数の割合として、値20までの間に設定されます。ハッシュ索引の正確なサイズを設定するには、アプリケーションで表の想定サイズを指定する必要があります。これにはPAGESパラメータを使用します。PAGESパラメータには、表の想定行数を256単位で指定します(256はTimesTenで各ページに保存される行数の単位で、表の想定ページ数が値として設定されます)。メモリーの使用量を抑える必要がない場合は、アプリケーションでPAGESに多めの値を設定できるため、バケット当たりの行数が平均して少なくなります。
ハッシュ・キーには、最大16列を指定できます。
主キーに保存されるすべての列は、NOT NULLである必要があります。
一意のハッシュ索引は、主キーに対してのみ指定できます。
ColumnDefinition
で指定されたPRIMARY KEYは、1つの列に対してのみ指定できます。
PRIMARY KEYは、ColumnDefinition
パラメータとCREATE TABLEパラメータの両方に指定することはできません。
主キーおよび外部キー制約において、制約列リストでの列名の重複は許可されません。
キャッシュ表を参照する外部キーを持つ表は作成できません。
UNIQUE列制約およびデフォルトの列の値は、マテリアライズド・ビューではサポートされていません。
子表の外部キー制約でON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。
ON DELETE CASCADEトリガー・アクションを変更するには、外部キー制約を削除して再定義してください。
ON DELETE CASCADEは、マテリアライズド・ビューのディテール表でサポートされています。子表に対して定義されたマテリアライズド・ビューがある場合、親表からの削除によって子表でカスケード削除が行われます。つまり、親表での削除により、マテリアライズド・ビューも変更されます。
DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。
ON DELETE CASCADE: 親表から子表へのパスが異なる場合があるため、次のルールが適用されます。
親表から子表へのすべてのパスを、deleteパスかdo not deleteパスのいずれかに統一します。deleteパスのすべての子表でON DELETE CASCADEを指定します。
このルールは、1つの親表から複数の子表へ、または複数の親表から1つの子表へのパスには適用されません。
ON DELETE CASCADE: 第2のルールも適用されます。
ある表に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エージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。ON DELETE CASCADEの設定は無視されます。
時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。ON DELETE CASCADEは、設定の有無にかかわらず無視されます。
AS SelectQuery
句を指定する場合:
データ型およびデータ型の長さは、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句を指定しないでください。
SelectQuery
に集合演算子UNION、MINUSおよびINTERSECTを含めることはできません。
グローバル一時表は、サポートされていません。
例
範囲索引が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 table found.
ハッシュ索引は、主キーである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. 1 table found.
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 table found.
次の文は、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 - 列値
)<= 3の場合、エージ・アウトされません。
(SYSDATE - 列値
)> 3の場合、行はエージ・アウトの対象となります。
(SYSDATE - 列値
)= 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 employee_id 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 *)
関連項目