ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 


CREATE SYNONYM文

既存のデータベース・オブジェクトの代替名またはシノニムを作成します。オブジェクトとは、ドメイン、ファンクション、モジュール、プロシージャ、シーケンス、別のシノニム、表、ビューのいずれかです。

シノニムの定義後は、問合せやデータ定義言語文で、被参照オブジェクトのかわりに使用できます。

ただし、SHOWコマンドではシノニムを受け入れません。名前がシノニムかどうかを判別するには、SHOW SYNONYM文を使用します。


環境

CREATE SYNONYM文は次の環境で使用できます。


形式




引数

COMMENT IS 'quoted-string'

このオプションの句は、複数行のコメントをシノニム・オブジェクトに追加する場合に使用できます。コメントはSHOW SYNONYM文によって表示されます。

FOR object-name

シノニムを必要とするデータベース・オブジェクトの名前です。この名前は、データベース内のオブジェクト用として存在している必要があります。オプションのオブジェクト・タイプが省略されると、Oracle Rdbではこの名前のオブジェクトについてデータベースを検索します。

DOMAIN

FUNCTION

MODULE

PROCEDURE

SEQUENCE

SYNONYM

TABLE

これらのオプションのオブジェクト・タイプは、被参照オブジェクト名がデータベース内で一意でない場合に使用できます。たとえば、Oracle Rdbではドメインと表は両者ともMONEYと呼ばれます。したがって、表MONEYのシノニムを作成するには、一意に識別できるようにFOR TABLE句を使用する必要があります。

OR REPLACE

この名前のシノニムがある場合は置換するようにSQLに指示します。存在しない場合は、新しいシノニムを作成します。この簡略化により、問合せおよびこのシノニムのDDL使用によって確立されたすべての依存性を維持しながら、既存のシノニムの置換が可能になります。

PUBLIC

このオプションの句は、Oracleデータベース・サーバーとの互換性を目的としています。Oracle Rdbでは現在使用されていません。使用するかどうかは、将来のリリースで決定します。アプリケーションではPUBLICキーワードの使用をお薦めします。

synonym-name

作成するシノニムの名前です。シノニム名は、データベース内のすべてのドメイン、表、ビュー、ファンクション、プロシージャ、モジュール、シーケンス、シノニムで一意である必要があります。これは別名で修飾することもできます。

使用方法


例1: デフォルトの別名の使用


SQL> CREATE SYNONYM emps FOR employees;

例2: シノニムの明示的な別名の使用


SQL> CREATE SYNONYM db1.emps FOR employees;

例3: 被参照オブジェクトの明示的な別名の使用


SQL> CREATE SYNONYM emps FOR db1.employees;

例4: 明示的な別名の使用


SQL> CREATE SYNONYM db1.emps FOR db1.employees;

例5: 表タイプの使用


SQL> CREATE SYNONYM cash FOR table money
cont>   COMMENT IS 'use a different name to avoid confusion with'
cont>   /          'the domain MONEY';

例6: 複数シノニムの使用


SQL> CREATE TABLE t_employees_0001 (...);
SQL> CREATE SYNONYM employees FOR t_employees_0001;
SQL> CREATE SYNONYM emps FOR employees;


CREATE TABLE文

一時または永続実表の定義を作成します。表定義は、表の行となる列定義のリストで構成されます。

永続実表とは、メタデータおよびデータが1つのSQLセッションの範囲を超えてデータベースに格納される表のことです。データはデータベースにアタッチしたすべてのユーザーが共有できます。

一時表とは、SQLセッションまたはモジュールが終了するとデータが自動的に削除される表のことです。この表は、SQLセッションで参照し、SQLセッションに対してデータがローカルな場合のみ具体化します。セッション内で、トランザクションの終わりにデータを保存するか、削除するかを指定することもできます。デフォルトの設定はデータ削除です。一時表のデータはユーザーには非公開です。一時表には次の3種類があります。

グローバル一時表のメタデータはデータベースに格納され、そのSQLセッションの範囲を超えて永続します。様々なSQLセッションで同じメタデータを共有できます。表に格納されているデータは、SQLセッション間では共有できません。ただし、データは、単一のSQLセッションのモジュール間で共有できます。データは1つのSQLセッションの範囲を超えて永続しません。

ローカル一時表のメタデータはデータベースに格納され、SQLセッションの範囲を超えて永続します。様々なSQLセッションで同じメタデータを共有できます。表に格納されているデータは、単一のSQLセッションの様々なモジュール間やSQLセッション間では共有できません。データは1つのSQLセッションやモジュールの範囲を超えて永続しません。

一時表は、ユーザーのデータ保持用として使用され、そのデータは他のユーザーとは共有されないためロックは不要であり、読取り専用トランザクションで変更できます。

一時表の詳細は、『Oracle Rdb7 Guide to Database Design and Definition』を参照してください。

情報表は読取り専用の特殊な表であり、既存のリレーショナル表に格納されていないデータベース属性の取得に使用できます。情報表により、現在、内部形式で格納されている目的のデータベース情報をリレーショナル表として表示できます。

表を定義するとき、表の制約も定義できます。制約は、表に格納できる値を制限する条件を指定します。制約によって列に格納するものを次のように指定できます。

CREATE TABLE文で表定義を指定するには、次のように複数の方法があります。

SQLでは、表の列の定義の際、デフォルトの文字データ型または各国語キャラクタ・データ型を定義できます。


環境

CREATE TABLE文は次の環境で使用できます。


形式




















引数

ALIAS alias

特定のデータベースにアタッチする名前を指定します。SQLでは、この別名で参照されるデータベースに表定義を追加します。

別名を指定しない場合、SQLではデフォルト・データベースに表定義を追加します。デフォルト・データベースおよび別名の詳細は、第2.2.1項を参照してください。

AUTOMATIC AS value-expr

AUTOMATIC INSERT AS value-expr

AUTOMATIC UPDATE AS value-expr

これらのAUTOMATIC列句を使用すると、データが行に挿入された場合、または行が更新された場合に特別な情報を格納できます。たとえば、アプリケーション固有の情報を記録して、アクティビティを監査したり、タイムスタンプまたはデータの一意の識別子などの重要な値を提供できます。

これらのタイプの列に対する値の割当ては、Oracle Rdbにより管理されます。AUTOMATIC INSERT句を使用して、行が挿入される場合に、列に対して複合デフォルトを提供できます。これは、UPDATE文では変更できません。AUTOMATIC UPDATE句は、UPDATE文に更新値を提供する場合に使用できます。修飾されていないAUTOMATIC句は、INSERT文とUPDATE文の両方に値式が適用されるよう指定します。列タイプはAS value-exprから適用されます。CASTを使用すると、特定のデータ型を指定できます。ただし、これは必須ではなく、必要な場合も限られます。

AUTOMATIC INSERT列を定義して、挿入操作時に自動的にデータを受信できます。データは他の列と同様に格納されますが、列は読取り専用です。AUTOMATIC列は読取り専用列として処理されるため、挿入操作用の列リストには表示されず、更新操作によっても変更されません。AUTOMATIC UPDATE列には、行が挿入されるときに使用される関連付けられたデフォルト値を格納できます。「例」の項の「例15」を参照してください。

char-data-type

有効なSQL文字データ型です。文字データ型の詳細は、第2.3.1項を参照してください。

character-set-name

有効なキャラクタ・セット名です。

CHECK predicate

表に挿入された列値が満たす必要がある条件を指定します。条件指定の詳細は、第2.7節を参照してください。

CHECK列制約の条件では、関連付けられた列のみ直接参照されます。詳細は、「使用方法」を参照してください。

col-constraint

関連する列に格納されている値に適用される制約です。

SQLでは、列の制約と表の制約が可能です。「使用方法」では、列の制約と表の制約の相違をまとめています。列制約には、PRIMARY KEY、UNIQUE、NOT NULL、CHECKおよびFOREIGN KEY制約の5つのタイプがあります。FOREIGN KEY制約はREFERENCES句で作成されます。

列制約は、永続実表およびグローバル一時表に対してのみ定義できます。

col-definition

表の列に対する定義です。SQLでは、列定義の指定には次の2通りの方法があります。

どちらの方法でも、デフォルト値、列制約およびフォーマット句を指定できます。

column-name

表内に作成する列の名前です。列の定義に直接データ型を指定するか、または列の定義にドメイン名を指定して間接的にデータ型を指定するかに関係なく、列名を指定する必要があります。

COMPUTED BY value-expr

この列の値が、他の列および定数式から算出されるよう指定します。

列定義が値式内の列名を参照する場合、指定した列は同じCREATE TABLE文内で定義されている必要があります。値式の詳細は、第2.6節を参照してください。

算出列の定義を参照する列は、最初にその算出列を削除する場合を除き、その表から削除できません。

SQLでは、次のものが算出列には認められません。

たとえば、従業員のFICA_RATEが従業員の初任給の6.10%で、団体保険が0.7%である場合、次のようにFICA_RATEおよびGROUP_RATE列を定義できます。


SQL> CREATE TABLE payroll_detail
cont> (salary_code CHAR(1),
cont>  starting_salary SMALLINT(2),
cont>  fica_amt
cont>    COMPUTED BY (starting_salary * 0.061),
cont>  group_rate
cont>    COMPUTED BY (starting_salary * 0.007));

このタイプの定義を使用する場合は、salary_codeとstarting_salaryの列の値のみを格納します。FICAおよび団体保険控除の列は、列fica_amtまたはgroup_rateを選択すると自動的に計算されます。

例11に、選択式を使用するCOMPUTED BY列を示します。

constraint-attributes

制約属性構文により、表6-3に示すように、SQL99規格の要件に応じて11の順列が指定されますが、これらは次の3つのオプションと同じです。

CONSTRAINT constraint-name

列または表の制約の名前を指定します。この名前は、次のような様々な目的に使用されます。

CONSTRAINT句はオプションです。制約名を省略すると、SQLにより名前が作成されます。ただし、Oracle Rdbでは、列制約および表制約に常に名前を付けることをお薦めします。CONSTRAINT句を使用して制約名を指定する場合、マルチスキーマ・データベースを使用しているときは、その名前はデータベース内またはスキーマ内で一意である必要があります。

data-type

有効なSQLデータ型です。列に関連付ける明示的なデータ型の指定は、ドメイン名指定の代替手段です。データ型の詳細は、第2.3節を参照してください。

date-time-data-types

日付、時間、または期間を指定するデータ型です。日時データ型の詳細は、第2.3.2項を参照してください。

DEFAULT value-expr

挿入された列にその列の値が含まれていない場合に、列のデフォルト値を設定します。

副問合せ、条件、文字、日/時および数式を含む、あらゆる値式をデフォルト値として使用できます。値式の詳細は、第2.6節を参照してください。

NULLの詳細は、第2.6.1項およびこの引数リストに続く「使用方法」を参照してください。

第2.6節で説明している値式には、DBKEYおよび集計関数が含まれています。ただしDEFAULT句は、DBKEYまたは集計関数の参照に有効な場所ではありません。いずれかを参照しようとすると、コンパイル時エラーが表示されます。

デフォルト値を指定しない場合、列はドメインからのデフォルト値を継承します。列またはドメインのいずれにもデフォルト値を指定しない場合、SQLはNULLをデフォルト値として割り当てます。

domain-name

CREATE DOMAIN文で作成されるドメインの名前です。SQLにより、列にはドメインで指定したデータ型が指定されます。ドメインの詳細は、「CREATE DOMAIN文」を参照してください。

通常の目的には、明示的なデータ型ではなくドメインを指定します。

ただし、次の場合は、表の作成時にドメインを使用しないことをお薦めします。

enable-disable-clause

次のリストで説明する、全制約、指定した制約、主キー、または一意の列名を有効または無効にできます。デフォルトでは、表作成の操作時に追加された表制約および列制約は有効になっています。

FOREIGN KEY column-name

定義する表(参照表)の外部キーとして宣言する列の名前です。算出列は外部キーとして宣言できません。

FROM path-name

リポジトリ・レコード定義のリポジトリ・パス名を指定します。SQLでは、このレコードから定義を使用して表を作成し、表にレコード定義の名前を付けます。

FROM path-name句を使用して表を作成できるのは、リポジトリのレコード定義が、最初に作成したリポジトリの共通ディクショナリ演算子(CDO)ユーティリティを使用して作成されている場合のみです。たとえば、レコード定義がSQLセッションの一部としてリポジトリに作成されている場合は、FROM path-name句では表を作成できません。

リポジトリのレコードにネストされた定義が含まれている場合は、それに基づいて表を作成することはできません。

リポジトリのレコード定義に基づいて表を作成するのは、多くのアプリケーションで同一の定義を共有する場合に便利です。一般定義への変更は、それを使用するすべてのアプリケーションに自動的に反映されます。

注意

他のユーザーまたはアプリケーションによるリポジトリ内のレコード定義の変更は、リポジトリがINTEGRATE DATABASE...ALTER FILES文に一致するようにデータベースを統合すると、表定義に影響します。このような変更に表や表の列の基礎となるレコードやフィールドの削除が含まれている場合、それに依存する表や表の列にあるデータは、次にINTEGRATE DATABASE...ALTER FILES文が実行されると失われます。

FROM句は、PATHNAMEを指定してデータベースがアタッチされている場合のみ使用できます。リポジトリ・パス名としてフルパス名または相対パス名のいずれかを指定できます。

CREATE TABLE文のFROM path-name形式を使用する場合は、DATATRIEVEフォーマット句など、制約や他の表定義句は定義できません。この制限によって、後でALTER TABLE文を使用してそれを追加できないということはありません。

CREATE DATABASE文にCREATE TABLE文を埋め込む場合は、FROM path-name句は使用できません。

GLOBAL TEMPORARY

LOCAL

表定義がグローバル一時表、またはローカル一時表のどちらであるかを指定します。

IDENTITY

列が特殊な読取り専用識別列であることを指定します。INSERTによってこの列が評価され、挿入された各行の一意の値が格納されます。表の1列のみがIDENTITY属性を保持できます。Rdbにより、現在の表と同じ名前を持つ順序が作成されます。

詳細は、「ALTER SEQUENCE文」および「CREATE SEQUENCE文」を参照してください。

increment-by

IDENTITY列に作成された順序の増分を指定する整数リテラル値です。負の値によって降順が、正の値によって昇順が作成されます。値ゼロは使用できません。デフォルト値の1が省略される場合、昇順になります。

INFORMATION

表定義が情報表であることを指定します。情報表の詳細は、付録Iを参照してください。

情報表はオラクル社で使用するために予約されています。

LIKE other-table-name

データベース管理者は、既存表用にメタデータをコピーし、類似する特性で新規の表を作成できます。オプションの列リストを使用すると、この表に列および制約を追加できます。被参照表は作成する表と同じデータベース内にある必要があります。

LOGGING

NOLOGGING

LOGGING句は、CREATE TABLE文がリカバリ・ユニット・ジャーナル・ファイル(.ruj)とアフター・イメージ・ジャーナル・ファイル(.aij)に記録されることを指定します。

NOLOGGING句は、CREATE TABLE文がリカバリ・ユニット・ジャーナル・ファイル(.ruj)とアフター・イメージ・ジャーナル・ファイル(.aij)に記録されないことを指定します。

デフォルトはLOGGING句です。

NOT NULL

列の値をNULL以外の値に制限します。

ON COMMIT PRESERVE ROWS

ON COMMIT DELETE ROWS

グローバル一時表またはローカル一時表のみで、COMMIT文の後にデータを保持するか、削除するかを指定します。

指定しない場合、デフォルトはON COMMIT DELETE ROWSです。

PRIMARY KEY

主キー制約により、その値によって表内の行を他の行とは区別する1つ以上の列が定義されます。SQLでは主キー列の値が一意でありNULLではないことを必要とします。したがって、主キー列に対してUNIQUE列制約およびNOT NULL列制約を指定する必要はありません。

算出列には主キー制約を指定できません。

表制約として使用する場合は、列名のリストをこの句の後に付ける必要があります。列制約として使用する場合は、この句を表の指定された列に適用します。

references-clause

一意キーまたは主キーの列名、または被参照表の列名を指定します。表制約としてREFERENCES句が使用される場合は、FOREIGN KEY句で指定される列名が参照表の外部キーになります。

列タイプ句として使用する場合は、列のタイプは参照されるPRIMARY KEY索引またはUNIQUE索引から継承されるよう指定します。データ型とドメインの両方が継承されます。

REFERENCES referenced-table-name

参照表によって参照される一意キーまたは主キーを含む表の名前を指定します。別の表にある一意キーまたは主キーを参照する制約を宣言するには、被参照表に対するSQL REFERENCESまたはCREATE権限が必要です。

referenced-column-name

列制約の場合、被参照表の一意キーまたは主キーである列の名前です。算出列は被参照列名としては使用できません。表制約では、被参照列名が被参照表の一意キーまたは主キーである列の名前です。referenced-column-name句を省略すると、デフォルトで主キーが選択されます。列数とそのデータ型は一致する必要があります。

sql-and-dtr-clause

オプションのSQLフォーマット句です。フォーマット句の詳細は、第2.5節を参照してください。