例2: レポジトリを使用しないデータベースの作成
この例では、次を示しています。
SQL> CREATE DATABASE ALIAS acct cont> FILENAME acct cont> SNAPSHOT IS ENABLED IMMEDIATE cont> SNAPSHOT ALLOCATION IS 200 PAGES; |
例3: スナップショット・ファイルを無効化したデータベースの作成
この文は、データベース・ルート・ファイルを作成し、ディスク領域を節約するためにスナップショットの書込みを無効化して、初期割当てサイズを1に設定します。
SQL> CREATE DATABASE ALIAS PERS cont> FILENAME personnel cont> SNAPSHOT IS DISABLED cont> SNAPSHOT ALLOCATION IS 1 PAGES; |
例4: ANSI/ISOスタイルの権限を持つデータベースの作成
この文は、すべてのANSI/ISOスタイルの権限がデータベース作成者WARRINGに付与され、識別子[*,*]というPUBLIC識別子には権限が付与されないデータベースを作成します。
SQL> CREATE DATABASE ALIAS EXAMPLE cont> FILENAME ansi_test cont> PROTECTION IS ANSI; SQL> SQL> SHOW PROTECTION ON DATABASE EXAMPLE; Protection on Alias EXAMPLE [SQL,WARRING]: With Grant Option: SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP, DBCTRL,OPERATOR,DBADM,SECURITY,DISTRIBTRAN Without Grant Option: NONE [*,*]: With Grant Option: NONE Without Grant Option: NONE |
例5: GERMANという照合順番を持つデータベースの作成
この文は、LITERATUREという名前のデータベースを作成し、GERMANという名前の照合順番を指定します(NCSライブラリで定義されているGERMAN照合順番に基づく)。
SQL> CREATE DATABASE FILENAME literature cont> COLLATING SEQUENCE GERMAN GERMAN; SQL> SHOW COLLATING SEQUENCE User collating sequences in schema with filename LITERATURE GERMAN |
例6: グローバル・バッファを持つデータベースの作成
この文は、parts.rdbという名前のデータベースを作成します。
SQL> CREATE DATABASE ALIAS PARTS FILENAME parts cont> GLOBAL BUFFERS ARE ENABLED (NUMBER IS 110, USER LIMIT IS 17); |
例7: データベースのデフォルト・キャラクタ・セットと各国語キャラクタ・セットを指定したデータベースの作成
次のSQL文は、データベースのデフォルト・キャラクタ・セットをDEC_KANJI、各国語キャラクタ・セットをKANJIと指定してデータベースを作成します。SHOW DATABASE文を使用してデータベース設定を表示します。
SQL> SET DIALECT 'SQL99'; SQL> CREATE DATABASE FILENAME mia_char_set cont> DEFAULT CHARACTER SET DEC_KANJI cont> NATIONAL CHARACTER SET KANJI cont> IDENTIFIER CHARACTER SET DEC_KANJI; SQL> -- SQL> SHOW CHARACTER SET; Default character set is DEC_MCS National character set is DEC_MCS Identifier character set is DEC_MCS Literal character set is DEC_MCS Display character set is UNSPECIFIED Alias RDB$DBHANDLE: Identifier character set is DEC_KANJI Default character set is DEC_KANJI National character set is KANJI |
SHOW CHARACTER SETS文の詳細は、「SHOW文」を参照してください。
例8: 次の方法を示す例
SQL> CREATE DATABASE FILENAME sample cont> SNAPSHOT IS DISABLED cont> RESERVE 10 JOURNALS cont> RESERVE 10 STORAGE AREAS cont> RESERVE 5 CACHE SLOTS cont> SYSTEM INDEX COMPRESSION IS ENABLED cont> ROW CACHE IS ENABLED cont> WORKLOAD COLLECTION IS ENABLED cont> RESTRICTED ACCESS cont> STATISTICS COLLECTION IS DISABLED cont> CARDINALITY COLLECTION IS DISABLED cont> LOCKING IS ROW LEVEL cont> DEFAULT STORAGE AREA IS area1 cont> OPEN IS AUTOMATIC (WAIT 5 MINUTES FOR CLOSE) cont> RECOVERY JOURNAL (LOCATION IS 'SQL_USER1:[DAY]') cont> CREATE CACHE cache1 cont> CACHE SIZE IS 1000 ROWS cont> ROW LENGTH IS 1000 BYTES cont> CREATE STORAGE AREA area1 cont> CACHE USING cache1; SQL> SQL> SHOW DATABASE *; Default alias: Oracle Rdb database in file sample Multischema mode is disabled Number of users: 50 Number of nodes: 16 Buffer Size (blocks/buffer): 6 Number of Buffers: 20 Number of Recovery Buffers: 20 Snapshots are Disabled Carry over locks are enabled Lock timeout interval is 0 seconds Adjustable lock granularity is enabled (count is 3) Global buffers are disabled (number is 250, user limit is 5, page transfer via disk) Journal fast commit is disabled ( checkpoint interval is 0 blocks, checkpoint timed every 0 seconds, no commit to journal optimization, transaction interval is 256 ) AIJ File Allocation: 512 AIJ File Extent: 512 Statistics Collection is DISABLED Unused Storage Areas: 10 Unused Journals: 10 System Index Compression is ENABLED Restricted Access Journal is Disabled Backup Server: Manual Log Server: Manual Overwrite: Disabled Notification: Disabled Asynchronous Prefetch is Enabled (depth is 5) Asynchronous Batch Write is Enabled (clean buffers 5, max buffers 4) Lock Partitioning is DISABLED Incremental Backup Scan Optim uses SPAM pages Shutdown Time is 60 minutes Unused Cache Slots: 5 Workload Collection is Enabled Cardinality Collection is Disabled Metadata Changes are Enabled Row Cache is Enabled (Sweep interval is 1 second, No Location) Detected Asynch Prefetch is Enabled (depth is 4, threshold is 4) Default Storage Area AREA1 Mode is Open Automatic (Wait 5 minutes for close) RUJ File Location SQL_USER1:[DAY] Database Transaction Mode(s) Enabled: ALL Dictionary Not Required ACL based protections Storage Areas in database with filename sample RDB$SYSTEM List storage area. AREA1 Default storage area. Journals in database with filename sample No Journals Found Cache Objects in database with filename sample CACHE1 SQL> SHOW CACHE cache1; CACHE1 Cache Size: 1000 rows Row Length: 1000 bytes Row Replacement: Enabled Shared Memory: Process Large Memory: Disabled Window Count: 100 Reserved Rows: 20 Sweep Rows: 3000 Reserving Slots for Sequences No Sweep Thresholds Allocation: 100 blocks Extent: 100 blocks |
例9: 順序用のスロットの予約
SQL> CREATE DATABASE FILENAME many_sequences cont> RESERVE 320 SEQUENCES; |
例10: 行キャッシュを持つデータベースの作成
SQL> create database cont> filename SAMPLE cont> snapshot is disabled cont> reserve 10 journals cont> reserve 10 storage areas cont> reserve 5 cache slots cont> system index (compression is enabled, type sorted ranked) cont> row cache is enabled cont> workload collection is enabled cont> restricted access cont> default storage area is AREA1 cont> open is automatic (wait 5 minutes for close) cont> cont> create cache CACHE_AREA1 cont> shared memory is process cont> row length is 1000 bytes cont> cache size is 204 rows cont> checkpoint all rows to backing file cont> cont> create storage area AREA1 cont> page format is UNIFORM cont> cache using CACHE_AREA1 cont> ; SQL> SQL> show database * Default alias: Oracle Rdb database in file SAMPLE Multischema mode is disabled Number of users: 50 Number of nodes: 16 Buffer Size (blocks/buffer): 6 Number of Buffers: 20 Number of Recovery Buffers: 20 Snapshots are Disabled Carry over locks are enabled Lock timeout interval is 0 seconds Adjustable lock granularity is enabled (count is 3) Global buffers are disabled (number is 250, user limit is 5, page transfer via disk) Journal fast commit is disabled ( checkpoint interval is 0 blocks, checkpoint timed every 0 seconds, no commit to journal optimization, transaction interval is 256 ) AIJ File Allocation: 512 AIJ File Extent: 512 Statistics Collection is ENABLED Unused Storage Areas: 10 Unused Journals: 10 Unused Cache Slots: 5 Unused Sequences: 32 Restricted Access Journal is Disabled Backup Server: Manual Log Server: Manual Overwrite: Disabled Notification: Disabled Asynchronous Prefetch is Enabled (depth is 5) Asynchronous Batch Write is Enabled (clean buffers 5, max buffers 4) Lock Partitioning is DISABLED Incremental Backup Scan Optim uses SPAM pages Shutdown Time is 60 minutes Workload Collection is Enabled Cardinality Collection is Enabled Metadata Changes are Enabled Row Cache is Enabled Row cache: No Location Row cache: checkpoint updated rows to backing file Detected Asynch Prefetch is Enabled (depth is 4, threshold is 4) Default Storage Area AREA1 Mode is Open Automatic (Wait 5 minutes for close) No RUJ File Location recovery journal buffers are in local memory Database Transaction Mode(s) Enabled: ALL Shared Memory: Process Large Memory: Disabled Security Checking is External System Index Compression is ENABLED System Index: Type is sorted ranked Prefix cardinality collection is enabled Logminer support is disabled Galaxy support is disabled Prestarted transactions are enabled Dictionary Not Required ACL based protections Storage Areas in database with filename SAMPLE AREA1 Default storage area RDB$SYSTEM List storage area. Journals in database with filename SAMPLE No Journals Found Cache Objects in database with filename SAMPLE CACHE_AREA1 |
ドメイン定義を作成します。ドメインは、表列に設定可能な値のセット、キャラクタ・セット、照合順番およびフォーマット句を定義します。CREATE DOMAIN文は、データ型をドメイン名と関連付けることで値のセットを指定します。
ドメイン定義を指定するには、次の2つの方法があります。
- ドメイン名、データ型および次のオプション句を任意に組み合せて使用する方法:
- デフォルト値
- ストアド名
- 照合順番
- EDIT STRINGまたはQUERY HEADERなどのフォーマット句
- FROM句およびリポジトリ内ですでに定義されているフィールドを参照するリポジトリ・パス名を使用する方法
CREATE DOMAIN文を実行すると、SQLでデータベースにドメイン定義が追加されます。
PATHNAME指定でデータベースにアタッチすると、ドメイン定義もリポジトリに追加されます。
CREATE文とALTER TABLE文、およびファンクションとプロシージャの仮パラメータ宣言で、SQLデータ型のかわりにドメインを参照できます。ドメインを変更する必要がある場合、この1つのドメイン定義のみを変更すると(ALTER DOMAIN文を使用)、すべての表を変更できます。この機能によって、アプリケーションの一貫性の保持が容易になります。
ドメインは、次の場所で参照できます。
- CREATE文、ALTER文およびDROP DOMAIN文
- CREATE文およびALTER TABLE文における列のデータ型
- CREATE文およびALTER TABLE文におけるルーチン・パラメータのデータ型、または宣言された変数のデータ型
- CREATE FUNCTION文におけるファンクション・パラメータまたはファンクションの結果のデータ型
- CREATE PROCEDURE文におけるプロシージャ・パラメータのデータ型
- CREATE文およびALTER SYNONYM文におけるシノニムのベース・オブジェクト
- CAST式のデータ型
- 対話型SQLのDECLARE変数文のデータ型
- 対話型SQLのSELECT文およびPRINT文のEDIT USING句のソース。EDIT STRINGはこのドメインから継承されます。
CREATE DOMAIN文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
char-data-types
キャラクタ・タイプです。データ型の詳細は、第2.3節を参照してください。character-set-name
有効なキャラクタ・セットです。COLLATING SEQUENCE IS collation-name
名前付きドメインに照合順番を指定します。OpenVMS各国語キャラクタ・セット(NCS)のユーティリティでは、事前定義された一連の照合順番を使用でき、独自の照合順番も定義できます。COLLATING SEQUENCE句では、事前定義されたNCS照合順番とユーザー定義のNCS照合順番の両方を使用できます。
COLLATING SEQUENCE句をCREATE DOMAIN文で使用するには、最初にCREATE COLLATING SEQUENCE文を使用して、SQLに対するNCS照合順番を指定する必要があります。COLLATING SEQUENCE句に含まれる順番名の引数は、CREATE COLLATING SEQUENCE文に含まれる順番名と同一である必要があります。
COMMENT IS 'string'
ドメインに関するコメントを追加します。SQLでは、SHOW DOMAIN文の実行時にコメントのテキストが表示されます。コメントは一重引用符(')で囲み、コメント内の複数の行はスラッシュ(/)で区切ります。DATABASE ALIAS alias
FROM path-name句で、特定のデータベースへのアタッチの名前を指定します。SQLは、この別名で参照されるデータベースにドメイン定義を追加します。別名を指定しない場合、SQLではデフォルト・データベースにドメイン定義を追加します。デフォルト・データベースおよび別名の詳細は、第2.2.1項を参照してください。
date-time-data-types
日付、時間、または期間を指定するデータ型です。日時データ型の詳細は、第2.3.2項を参照してください。DEFAULT value-expr
ドメインにデフォルト値を指定します。副問合せ、条件、文字、日/時および数式を含む、あらゆる値式をデフォルト値として使用できます。値式の詳細は、第2.6節を参照してください。
NULLの詳細は、第2.6.1項およびこの引数リストに続く「使用方法」を参照してください。
第2.6節で説明している値式には、DBKEYおよび集計関数が含まれています。ただしDEFAULT句は、DBKEYまたは集計関数の参照に有効な場所ではありません。いずれかを参照しようとすると、コンパイル時エラーが表示されます。
列にDEFAULTを指定しない場合は、ドメインからDEFAULTが継承されます。列またはドメインのいずれにもデフォルトを指定しない場合、SQLはNULLをデフォルト値として割り当てます。
domain-constraint
名前付きドメインに制約を作成します。ドメイン作成時に、どの値をドメインに基づく列に格納するかを制限するドメイン制約を指定します。ドメイン制約は、ドメインに基づく列は特定のデータ値以外は含まないこと、またはデータ値をNULLにできるかどうかを指定します。
CHECK句を使用して、値が規定の範囲内である必要があること、または値が値リストと一致するように指定します。ドメイン制約にCHECK句を指定する場合、ドメインに基づいて列に格納されているすべての値が一貫してチェックされていることを確認します。
domain-name
作成するドメインの名前です。ドメイン名は、スキーマ内のドメイン名の間で一意である必要があります。ドメイン名は、別名またはスキーマ名(マルチスキーマ・データベース内のみ)で修飾できます。FROM path-name
リポジトリのフィールド定義のリポジトリ・パス名を指定します。SQLでは、このフィールドから定義を使用してドメインを作成し、ドメインにフィールド定義の名前を付けます。リポジトリのドメイン定義に基づいてドメインを作成するのは、多くのアプリケーションで同一の定義を共有する場合に便利です。一般定義への変更は、それを使用するすべてのアプリケーションに自動的に反映されます。
FROM path-name句を使用してドメインを作成できるのは、リポジトリのフィールド定義が、最初に作成したリポジトリのCDOユーティリティを使用して作成されている場合のみです。たとえば、定義がSQLセッションの一部としてリポジトリに作成されている場合は、FROM path-name句ではドメインを作成できません。Oracle Rdbでは、CDOユーティリティのVALID IF式で参照されているフィールド名が、定義または変更されるグローバル・フィールド名と一致する必要があります。
注意
他のユーザーまたはアプリケーションによるリポジトリ内のフィールド定義の変更は、リポジトリがINTEGRATE DATABASE...ALTER FILES文に一致するようにデータベースを統合すると、ドメイン定義に影響します。
FROM path-name句は、PATHNAMEを指定してデータベースがアタッチされている場合のみ使用できます。リポジトリ・パス名としてフルパス名または相対パス名のいずれかを指定できます。
CREATE DOMAIN文のFROM path-name形式を使用する場合は、フォーマット句を指定できません。
CREATE DATABASE文にCREATE DOMAIN文を埋め込む場合は、FROM path-name句は使用できません。
IS data-type
AS data-type
有効なSQLデータ型です。データ型の詳細は、第2.3節を参照してください。NO COLLATING SEQUENCE
このドメインが、標準のデフォルト照合順番(ASCII)を使用するように指定します。NO COLLATING SEQUENCE句を使用して、CREATE DATABASE文またはALTER DATABASE文の中のデータベースに対して定義された照合順番をオーバーライドします。sql-and-dtr-clause
オプションのSQLおよびDATATRIEVEフォーマット句です。フォーマット句の詳細は、第2.5節を参照してください。STORED NAME IS stored-name
マルチスキーマ・データベースに作成したドメインへのアクセスに使用される名前を指定します。ストアド名を使用すると、Oracle Rdb管理ユーティリティであるOracle RMUなどのインタフェースを使用して、マルチスキーマ定義にアクセスできます。このユーティリティでは、1つのデータベース内で複数のスキーマを認識しません。複数のスキーマに対応しないデータベース内では、ドメインのストアド名は指定できません。ストアド名の詳細は、第2.2.18項を参照してください。
- 通常、表を作成するときは、次の理由からドメインを使用する必要があります。
- 複数の表にある類似した列を1つの基準で統一できます。たとえば、ドメインID_DOMを使用して列を定義すると、これらの列すべてのデータ型がCHAR(5)になります。
- ドメイン自体を変更することにより、そのドメインを使用して定義したすべての列のデータ型または書式設定を変更できます。たとえば、POSTAL_CODE_DOMドメインのデータ型をCHAR(5)からCHAR(10)に変更する場合、必要な処理はPOSTAL_CODE_DOMのデータ型の変更のみです。表COLLEGESおよびEMPLOYEESの列POSTAL_CODEのデータ型を変更する必要はありません。
- ドメインを使用して定義したすべての列のデフォルト値を指定できます。たとえば、NULLやNot Applicableなどの値を使用し、そのドメインに基づく列へのデータ挿入が行われないことを明確に示すことができます。通常、列に特定の値が含まれる場合は、その値をデフォルトとして使用できます。たとえば、従業員のほとんどが同じ州に住んでいる場合は、その州をSTATE_DOM列のデフォルト値にできます。
列に指定したデフォルト値は、ドメインに指定したデフォルト値より優先されます。
- DEFAULT句で指定される値のデータ型は、そのデータ型が定義される列と同じデータ型である必要があります。データ型を指定しないと、SQLでは次の例に示すエラー・メッセージが表示されます。
SQL> CREATE DOMAIN TIME_DOM IS TIME ( 2 ) DEFAULT '00:00:00.00' ; %SQL-F-DEFVALINC, You specified a default value for TIME_DOM which is inconsistent with its data type SQL> CREATE DOMAIN TIME_DOM IS TIME ( 2 ) DEFAULT TIME '00:00:00.00' ;
- 次の場合は、表の作成時にドメインを使用しないことをお薦めします。
- 使用するアプリケーションがOracle RDBMSと互換性を持つ必要がある場合。
- 中間結果表を作成している場合。データベース内のドメインについて把握し、それらを定義するには時間がかかります。中間結果表はこの作業の妨げになる場合があります。
- リポジトリを使用してフィールド構造を定義する際、その構造がOracle Rdbで許容されない可能性があります。
リポジトリは、多くのレイヤー製品および言語で使用可能なデータ構造体を保持できる汎用データ・リポジトリとされています。
このようなデータ構造体は、Oracle Rdbが使用するリレーショナル・データ・モデルに適用する際は、必ずしも有効でない場合があります。
リポジトリのデータ構造体とOracle Rdb間の一般的な非互換性には、次のものがあります。
- %CDD-E-PRSMISSNG, attribute value is missing
このエラーは、リポジトリのフィールド定義にFILLER句が含まれていると発生する場合があります。- %CDD-E-INVALID_RDB_DTY, datatype of field is not supported by Oracle Rdb
このエラーは、リポジトリのフィールド定義にARRAY句が含まれていると発生する場合があります。- %CDD-E-HAS_DIMENSION, Oracle Rdb fields cannot have dimension
このエラーは、リポジトリのフィールド定義にOCCURS句が含まれていると発生する場合があります。
- NCHAR、NATIONAL CHAR、NCHAR VARYINGまたはNATIONAL CHAR VARYINGデータ型を使用すると、各国語キャラクタ・データ型を指定できます。各国語キャラクタ・データ型は、データベースの作成時に、データベース各国語キャラクタ・セットによって定義されます。各国語キャラクタ・データ型の詳細は、第2.3.1項を参照してください。
- データ型の長さは、文字またはオクテットで指定できます。デフォルトでは、データ型はオクテットで指定されます。CREATE DOMAIN文をSET CHARACTER LENGTH 'CHARACTERS'文またはSET DIALECT 'MIA'文またはSET DIALECT 'SQL99'文とともに前に配置すると、長さを文字数に変更できます。詳細は、「SET CHARACTER LENGTH文」および「SET DIALECT文」を参照してください。
- キャラクタ・セットを指定せずにキャラクタ・タイプ・ドメインを作成すると、データベースのデフォルト・キャラクタ・セットが割り当てられます。
- ドメイン絞込み条件を作成すると、条件には副問合せが含まれなくなるため、別のドメインを参照できなくなります。
- 各ドメインに対し、1件のみ絞込み条件を指定できます。
- CHECK制約構文では、VALUEキーワードまたはドメイン名を参照できます。次に例を示します。
SQL> -- The CHECK constraint can reference the VALUE keyword. SQL> -- SQL> CREATE DOMAIN D1 INTEGER cont> CHECK (VALUE > 10) cont> NOT DEFERRABLE; SQL> SHOW DOMAIN D1; D1 INTEGER Valid If: (VALUE > 10) SQL> ROLLBACK; SQL> -- SQL> -- The CHECK constraint can reference the domain name. SQL> -- SQL> CREATE DOMAIN D1 INTEGER cont> CHECK (D1 > 10) cont> NOT DEFERRABLE; SQL> SHOW DOMAIN D1 D1 INTEGER Valid If: (D1 > 10)
例1: 標準のEMPLOYEE_ID定義のドメインの作成次の例では、従業員IDの列の標準として定義されるドメインID_DOMを作成します。
SQL> CREATE DOMAIN ID_DOM CHAR(5) SQL> COMMENT IS cont> 'standard definition of employee id';
例2: 標準日付のドメインの作成
次の例では、編集文字列DD-MMM-YYYYを含むSTANDARD_DATE_DOMドメインが作成されます。
SQL> CREATE DOMAIN STANDARD_DATE_DOM DATE cont> EDIT STRING IS 'DD-MMM-YYYY' SQL> COMMENT IS cont> 'standard definition for complete dates';
例3: デフォルト値を使用したドメインの作成
次の例では、ADDRESS_DATA2_DOMおよびWORK_STATUS_DOMという2つのドメインが作成されます。ADDRESS_DATA2_DOMドメインは、デフォルト値NULLを含んでいます。WORK_STATUS_DOMドメインは、 フル・タイムのwork statusを示すデフォルト値1を含んでいます。
SQL> CREATE DOMAIN ADDRESS_DATA2_DOM CHAR(20) cont> DEFAULT NULL; SQL> -- SQL> CREATE DOMAIN WORK_STATUS_DOM SMALLINT cont> DEFAULT 1;
例4: リポジトリ・フィールド定義に基づくドメインの作成
次の例は、CREATE DOMAIN文で定義のソースとしてリポジトリを使用する例を示しています。
$ SQL$ SQL> ATTACH 'PATHNAME CDD$TOP.SQL.RDB.TEST.DATE'; SQL> CREATE DOMAIN FROM DOMAIN_TEST; SQL> SHOW DOMAIN User domains in database with pathname SYS$COMMON:[CDDPLUS]SQL.RDB.TEST.DATE;1 DOMAIN_TEST BIGINT
例5: 照合順番を持つドメインの作成