データベースを最初に作成するときに、データベースに格納されるすべてのデータベース定義(メタデータ)およびユーザー・データを含むファイルに対してファイル仕様を指定します。ファイル仕様名にはASCII英数字を使用する必要があります。
ファイル仕様はCONNECT文およびDECLARE ALIAS文でデータベースを参照するときに使用できますが、Oracle Rdbでは、リポジトリがインストールされている場合は、常にリポジトリ・パス名を使用することをお薦めします。詳細は、「DECLARE ALIAS文」および「CONNECT文」の「使用方法」を参照してください。
完全なファイル仕様には、次の項目が含まれます。
たとえば、OpenVMSの完全なファイル仕様の例は、次のとおりです。
SPEEDY::DISK_DEPT3:[LICENSES]APPLICANTS.RDB;18 |
可能な場合は、ファイル仕様で省略されたフィールドに対してデフォルト値が適用されます。
CREATE DATABASE文、ALTER DATABASE文、DROP DATABASE文、ATTACH文またはDECLARE ALIAS文を使用する場合は、ファイル仕様にファイル拡張子またはバージョン番号を含めないようにします。このファイル仕様を使用して、別のファイル拡張子を持つファイルが作成されます。たとえば、OpenVMSで単一ファイルのデータベースを作成する場合、Oracle Rdbによって.rdbおよび.snpというファイル拡張子を持つ2つのファイルが作成されます。拡張子またはバージョンを指定すると、これらの2つのファイル間で不整合が発生する場合があります。
また、ATTACH文またはDECLARE ALIAS文では、完全または部分的なファイル仕様のかわりに論理名も使用できます。
リモート・データベース(ネットワーク上の別ノードにあるデータベース)を使用している場合、ファイル仕様にノード名が確実に含まれるようにする必要があります。OpenVMSでは、クラスタ経由、DECnet経由、TCP/IP経由という3種類のリモート・アクセスが提供されています。Oracle Rdbでは、これら3種類の方法がすべてサポートされています。ノード名の形式は、使用する方法によって異なります。リモート・ノードが同一のクラスタ内に存在するか、DECnet経由で接続する場合、ノード名はリモート・システムのOpenVMSのノード名になります。TCP/IP経由の場合、ノード名には、TCP/IPのドメイン修飾子(MYSYS.MYDOM.MYNETなど)またはIPアドレス(10.20.30.40など)を含むTCP/IPのノード名を使用できます。また、DECnetでTCP/IPがトランスポート・レイヤーとして使用されている場合、DECnetのノード名をTCP/IPのノード名として使用できます。様々なリモート接続を使用したノード名の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。
リモート・データベースにアクセスするには別のコンピュータ・システムを使用する必要があるため、プロセスまたはプログラムによるリモート・システムへのログインおよびユーザー認証が必要になります。 リモート・ノード上のデータベースにアクセスするには、データベースにアタッチするSQL文および構成パラメータ内でユーザー名およびパスワード情報を明示的に指定できます。また、パラメータおよび新規コマンドライン修飾子を使用して、SQLモジュール言語またはプリコンパイルされたSQLプログラムにその情報を渡すこともできます。
Oracle Rdb for OpenVMSを使用して同一クラスタ内のデータベースにアタッチする場合、ユーザー名およびパスワードを明示的に指定する必要はありません。ユーザーがデータベースにアタッチするときは毎回Oracle Rdbによって暗黙的にユーザー認証が行われます。
ただし、Oracle Rdb for OpenVMSを使用してリモート・ノード上のデータベースにアタッチする場合は、リモート・ノードがOpenVMSノードであっても、Oracle Rdbによって提供されている方法の1つを使用してデータベースにアクセスする必要があります。
OpenVMSノード上のデータベースにアタッチするには、次の方法のいずれかを使用できます。
SQL> ATTACH 'FILENAME REMNOD::DISK1:[DIR]MF_PERSONNEL cont> USER ''heleng'' USING ''MYpassword'''; SQL> |
ユーザー名およびパスワードは一重引用符で囲む必要があります。ただし、この例のリテラルは引用符で囲まれたattach-string内に含まれているため、ユーザー名およびパスワードを一重引用符で2重に囲む必要があります。
! User name to be used for authentication SQL_USERNAME HELENG ! Password to be used for authentication SQL_PASSWORD MYPASSWORD |
SQL> ATTACH 'FILENAME REMNOD"JULIA OPEN_UP"::APPLICANTS.RDB'; |
この例では、リモート・ノード名がREMNOD、データベースが定義されているアカウントのユーザー名がJULIA、このアカウントのパスワードがOPEN_UPになっています。データベース・ファイルがJULIAのログイン・ディレクトリにある場合、ディスクおよびディレクトリの指定は不要です。DECnetソフトウェアによって、JULIAという名前のユーザーに対するログイン・プロセスが実行され、JULIAのディスクおよびログイン・ディレクトリが自動的に使用されます。
SQL文でUSER句およびUSING句を指定しない場合、Oracle Rdbにより構成ファイル内の情報が使用されます。構成ファイル内にSQL_USERNAMEパラメータおよびSQL_PASSWORDパラメータが指定されていない場合は、プロキシ・アカウントの有無がチェックされます。
2.2.8.2 リポジトリ・パス名
CREATE DATABASE文でPATHNAME引数を指定しない場合、SQLではデータ定義を格納するためにリポジトリは使用されません。
データベースを最初に作成するときにPATHNAME引数を指定すると、データベースのデータ定義のコピーを含むパス名が作成されます。
SQLではパス名は文字列リテラルと同様に処理されるため、パス名を一重引用符で囲む必要があります。リポジトリ・パス名にはASCII英数字を使用する必要があります。
ATTACH文またはDECLARE ALIAS文を発行するときは、データベースのリポジトリ・パス名(次に物理データベース・ファイルを指し示す)を指定することも、物理データベース・ファイル仕様を直接指定することもできます。
CREATE DATABASE文でPATHNAME引数を使用しない場合は、最初にINTEGRATE文を発行するまで、ATTACH文またはDECLARE ALIAS文でデータベースのパス名を指定できません。Oracle Rdbでは、CREATE DATABASE文、ATTACH文およびDECLARE ALIAS文で常にリポジトリ・パス名を使用し、DICTIONARY IS REQUIRED句を使用して2つのコピーが確実に同じになるようにすることをお薦めします。
Oracle Rdb機能の中には、リポジトリのすべてのバージョンで完全にはサポートされていないものがあります。パス名でのアタッチによるオブジェクトの作成、変更または削除は、リポジトリによって完全にはサポートされていないため、エラーまたは情報メッセージが表示される場合があります。バージョンの異なるリポジトリに対するOracle Rdb機能の互換性の詳細は、『Oracle Rdbリリース・ノート』を参照してください。
2.2.9 ドメイン名
ドメイン定義では、データ型とドメイン名を関連付けることによって、表列で保持可能な値セットが制限されます。また、ドメイン定義を使用すると、オプションのフォーマット句および照合句を使用できます。CREATE文およびALTER TABLE文では、列定義のドメイン名が参照されます。ドメイン名は、スキーマ内のドメイン名の間で一意である必要があります。
複数の表の列を定義するときに、ドメインを使用できます。ドメインを定義すると、CREATE文またはALTER TABLE文を使用してドメイン定義に基づいた列を定義できます。
ドメイン名は、スキーマ名(ドメインがマルチスキーマのデータベースに属している場合)または別名を使用して修飾できます。
通常、表を作成するときは、ドメインを使用する必要があります。ドメインを使用する場合の利点は、次のとおりです。
次の場合は、表の作成時にドメインを使用しないことをお薦めします。
構文図では、domain-nameの構文要素は、CREATE DOMAIN文でドメインに付けた名前の修飾済または未修飾のいずれかの形式を参照します。
|
索引名は、CREATE INDEX文を使用して指定します。CREATE INDEX文およびその他のSQL文では、指定した索引名を認可識別子で修飾できます。
構文図では、index-nameの構文要素は、CREATE INDEX文で索引に付けた名前の修飾済または未修飾のいずれかの形式を参照します。 |
データベースにマルチスキーマ属性を指定すると、データ定義をそのデータベース内の複数のスキーマに格納できます。マルチスキーマ属性を指定するには、CREATE DATABASE文またはALTER DATABASE文のMULTISCHEMA IS ON句を使用します。SQLの動作をANSI/ISO規格に準拠させる場合、マルチスキーマ属性を指定する必要があります。
複数のスキーマを持つデータベースでは、1つ以上のカタログ内にスキーマを構成する必要があります。マルチスキーマ・データベースのデータ定義を参照するには、スキーマ名、カタログ名、およびオプションで別名を使用して、データ定義名を修飾します。
別名を使用してマルチスキーマ・データベースのカタログ名、スキーマ名、オブジェクト名を修飾する方法は、次のとおりです。
マルチスキーマ・オブジェクトの修飾名の、左端の名前のペアはデリミタ付き識別子です。オブジェクト名では、修飾名はそれぞれ1つのレベルとみなされます。また、3レベルを超える名前は許可されていません。ただし、デリミタ付き識別子は単一レベルとして解釈されます。
3レベルの名前のどの部分であっても、二重引用符内に別名を埋め込むことができます。ただし、左端のレベルに埋め込むことができるのは別名のみです。たとえば、スキーマ名を指定してカタログ名を指定しない(暗黙的にデフォルトのカタログを示す)場合は、デリミタ付き識別子を使用して別名でスキーマ名を修飾できます。
Oracle RdbのSQL実装のデフォルトでは、二重引用符で囲まれた文字列は文字列リテラルとみなされますが、ANSI/ISO SQL規格では、二重引用符で囲まれた文字列はデリミタ付き識別子と解釈されます。ANSI/ISO SQL規格を利用するには、デリミタ付き識別子を含む文を発行する前にANSI/ISO SQL引用を有効にする必要があります。ANSI/ISO SQL引用を有効にする方法の詳細は、第2.2節を参照してください。
二重引用符で囲まれている、マルチスキーマ・オブジェクト名の左端のペアは大文字で指定する必要があります。
次の例は、3レベルの名前を示しています。MARKETINGカタログ、JONESスキーマ、LAST_NAMEドメインを持つデータベースの別名が、CORPORATEです。
SQL> SET QUOTING RULES 'SQL99'; SQL> SHOW DOMAIN "CORPORATE.MARKETING".JONES.LAST_NAME; |
デフォルトのカタログがMARKETINGに設定されている場合、ユーザーJONESは、別名で修飾されたオブジェクト名を使用してこの例のドメインを参照できます。
SQL> SET QUOTING RULES 'SQL99'; SQL> SHOW DOMAIN "CORPORATE.LAST_NAME"; |
単一スキーマ・データベースおよびマルチスキーマ・データベースのデータ定義は、異なるネーミング規則に従っています。マルチスキーマ・ネーミングを無効にするには、ATTACH文またはDECLARE ALIAS文のMULTISCHEMA IS OFF句を使用できます。単一スキーマおよびマルチスキーマのネーミング規則の相違の詳細は、第2.2.18項を参照してください。RDB$SCHEMAまたは別のスキーマ名を指定するには、マルチスキーマ・ネーミングが有効なマルチスキーマ・データベースにアタッチする必要があります。マルチスキーマ・ネーミングが無効な場合は、データベース名に関連付けられた別名を使用して、データベース全体の参照のみを実行できます。
MULTISCHEMA IS句を指定しない場合、マルチスキーマ・ネーミングは、マルチスキーマ属性を使用してデータベースが作成されている場合は有効に設定され、そうでない場合は無効に設定されます。
次の例は、マルチスキーマ属性を使用せずにデータベースにスキーマを作成しようとした場合に、SQLによって生成されるエラーを示しています。
SQL> ATTACH 'FILENAME personnel'; SQL> CREATE SCHEMA PACIFIC_NORTHWEST; %SQL-F-SCHCATMULTI, Schemas and catalogs may only be referenced with multischema enabled |
2.2.12 非ストアド・モジュール、プロシージャおよびパラメータ名(モジュール言語のみ)
SQLモジュール言語では、SQLモジュール・ファイルと呼ばれる別個のファイルに格納されたSQL文を実行する、ホスト言語プログラムのためのコール・メカニズムが提供されています。このモジュールには、SQLプリコンパイラでサポートされていないものを含め、あらゆるホスト言語からコール可能なSQL文が含まれています。このファイルには、次のようなユーザー指定の名前を含む、モジュール言語要素が格納されています。
%RDB-E-EXT_ERR, Rdb extension error -RDMS-E-MODEXTS, there is another module named SALARY_ROUTINES in this database |
SQLモジュール言語の詳細は、第3章を参照してください。
ストアド・モジュール、ストアド・ルーチンおよびストアド・ルーチン・パラメータ名の詳細は、「CREATE MODULE文」または『Oracle Rdb7 Guide to SQL Programming』を参照してください。
2.2.13 パラメータ、ルーチン・パラメータおよびSQL変数
パラメータ、ルーチン・パラメータおよびSQL変数は値式で頻繁に使用されます(値式の詳細は、第2.6節を参照)。
変数は、プログラムの実行中に変更される可能性がある値を表す識別子です。複数文プロシージャではSQL変数を使用できます。
ルーチン・パラメータは、ストアド・ルーチンまたは外部ルーチンで使用される、ルーチンのパラメータに関連付けられている変数です。ストアド・ルーチンは、CREATE MODULE文を使用して定義されるストアド・プロシージャとストアド・ファンクションの両方を指します。外部ルーチンは、CREATE PROCEDURE文およびCREATE FUNCTION文を使用して定義される外部プロシージャと外部ファンクションの両方を指します。
SQL変数を複数文プロシージャで使用するか、ルーチン・パラメータを使用する場合は、標識変数を使用しないでください。複数文プロシージャにおけるSQL変数、およびストアド・ルーチン・パラメータの詳細は、第2.2.13.3項を参照してください。外部ルーチン・パラメータの詳細は、第2.2.13.4項を参照してください。
パラメータは、SQL文に関連付けられているホスト言語プログラムで宣言される識別子です。パラメータは、プログラムの実行中に変更される可能性のある値を表します。通常の値式を受け入れないSQLデータ操作句の多くで、パラメータを使用する必要があります。ただし、データ定義言語文ではパラメータを使用できません。
次の場所でパラメータを使用できます。
SQL文では、次の目的でパラメータを使用します。
SQL文では、列、表またはビューを参照するパラメータは使用できません。たとえば、BADVARがデータベース内の表の名前を持つホスト言語変数の場合、次の文は無効になります。
EXEC SQL SELECT FIRST_NAME INTO :GOODVAR FROM :BADVAR END-EXEC |
プリコンパイラ、モジュール言語または動的SQLを使用する場合、データベースとデータをやりとりするときに、表示操作でCHAR型のホスト変数とともにCASTまたはEXTRACTを使用して、日時データをバイナリ形式から変換する必要があります。次に例を示します。
EXEC SQL SELECT CAST(TBL_INT_H3 AS CHAR(4)) INTO :string_var3 FROM ALL_DATE_TABLE; |
CASTファンクションおよびEXTRACTファンクションの詳細は、それぞれ第2.6.2.2項および第2.6.2.11項を参照してください。
パラメータの詳細は、第2.2.13.1項を参照してください。