ユーザー指定の名前を必要とするSQL文の構文を満たす名前(識別子)を指定する必要があります。文の構文図では、ユーザー指定の名前は小文字で示されます。
ユーザー指定の名前は、次の要件を満たしている必要があります。
SQL> SET QUOTING RULES 'SQL99 SQL> CREATE TABLE "This is a Test" cont> ("""" CHAR(5), cont> "_NAME" CHAR(20), cont> " City" CHAR(20), cont> "1st_date" DATE, cont> "A ""B and C""" CHAR(10), cont> "$_Amount" INT, cont> """Test" CHAR(5) cont> ); SQL> SHOW TABLE (COLUMN) "This is a Test"; Information for table This is a Test Columns for table This is a Test: Column Name Data Type Domain ----------- --------- ------ " CHAR(5) _NAME CHAR(20) City CHAR(20) 1st_date DATE VMS A "B and C" CHAR(10) $_Amount INTEGER "Test CHAR(5) |
デリミタ付き識別子を使用する場合、SQLでは識別子の大/小文字の区別が保持されます。つまり、識別子Employee_IDを引用符で囲む("Employee_ID")と、大文字および小文字がSQLで保持されます。デリミタ付き識別子"Employee_ID"、"EMPLOYEE_ID"、"employee_id"は、それぞれ別個のものとして処理されます。
デリミタ付き識別子を使用する場合は、ANSI/ISO SQL引用を有効にする必要があります。ANSI/ISO SQL引用は、次の方法で有効にできます。
キーワードをユーザー指定の名前に使用する場合は、引用ルールまたは言語をSQL99に設定して、デリミタ付き識別子を使用する必要があります。次に例を示します。
SQL> SET DIALECT 'SQL99'; SQL> -- You must use the delimited identifier to create SQL> -- a domain named DATE. If you do not, SQL returns an SQL> -- error message. SQL> -- SQL> CREATE DOMAIN DATE CHAR (100); %SQL-F-RES_WORD_AS_IDE, Keyword DATE used as an identifier SQL> -- SQL> CREATE DOMAIN "DATE" CHAR (100); SQL> SHOW DOMAIN "DATE" DATE CHAR(100) SQL> -- SQL> -- You must also use the delimited identifier around SQL> -- the user-supplied table name if you want to use the domain SQL> -- DATE; otherwise, the data type DATE will be referenced. SQL> -- SQL> CREATE TABLE ABC cont> (FIELD_1 "DATE", cont> FIELD_2 "DATE", cont> FIELD_3 DATE); SQL> -- SQL> SHOW TABLE (COLUMNS) ABC; Information for table ABC Columns for table ABC: Column Name Data Type Domain ----------- --------- ------ FIELD_1 CHAR(100) DATE FIELD_2 CHAR(100) DATE FIELD_3 DATE ANSI |
言語の設定の詳細は、「SET DIALECT文」および『Oracle Rdb7 Introduction to SQL』を参照してください。
SQLでは、データベース・オブジェクト名のキャラクタ・セットとして識別子キャラクタ・セットが使用されます。ただし、SQLでは一部のデータベース・オブジェクト名がファイル名またはパス名として解釈されるため、次のデータベース・オブジェクトにはASCII英数字のみを含む名前を使用する必要があります。
デリミタ付き識別子を使用しない場合は、SQLで小文字が大文字に変換されるため、(ファイル名以外の)データベース・オブジェクト名に含まれる大文字と小文字が同じであるとみなされます。つまり、EMPLOYEE_ID、employee_id、Employee_IDは、SQLでEMPLOYEE_IDに変換されるため、同じものになります。大文字と小文字の概念を使用しないキャラクタ・セットは変換されません。
SQLキーワードをユーザー指定の名前に使用する場合は、二重引用符で名前を区切って、名前とキーワードを区別してください。これを実行しないと、予期しない結果となる可能性があります。 |
一部の製品と異なり、SQLではユーザー指定の名前に含まれるハイフン(マイナス記号として解釈される)はアンダースコアに変換されません。かわりに、これらの名前に含まれるハイフンおよびアンダースコアは、個別の文字とみなされます。つまり、ユーザー指定の名前ではハイフンは使用できません。たとえば、列名EMPLOYEE_IDのかわりにEMPLOYEE-IDと入力できません。
埋込みSQL文に含まれるホスト言語パラメータは、ユーザー指定の名前に関してSQLプリコンパイラが言語固有のルールに準拠する特殊なケースです。プリコンパイラは、大文字と小文字、ハイフンとアンダースコア、有効な文字と無効な文字がそれぞれ区別されるという、ホスト言語の表記規則に準拠しています。
表2-5に、構文図で参照されるユーザー指定の名前の簡単な定義を示します。ユーザー指定の名前の詳細は、後続の項で説明します。
ユーザー指定の 名前 |
説明 |
---|---|
area-name | 複数ファイルのデータベースの特定の表に関連付けられる記憶域およびスナップショット・ファイルを指定する名前。領域名にはASCII英数字を使用する必要がある。 |
alias | データベースの特定のアタッチメントに付ける名前。別名、プログラムまたは対話型SQL文を使用すると、1つの環境で複数のデータベースを参照できる。別名を使用してデータベース定義名を修飾し、別のデータベースの定義と区別できる。この修飾が必須な場合もある。別名の長さは31文字以内に制限される。別名はアルファベット文字で始める必要があり、数字、ドル記号($)、アンダースコア(_)を含めることができる。 |
auth-id | マルチスキーマ・データベースでのスキーマの識別および権限のチェックに使用される名前。 |
catalog-name | 1つ以上のスキーマを含むデータベース・オブジェクトの名前。マルチスキーマ・オプションを使用しないデータベースは、カタログを含まない。 |
collation-name | CREATE COLLATING SEQUENCE文のncs-name引数で指定される照合順番を、スキーマで認識するために使用される名前。collation-name引数およびncs-name引数は、同じものにできる。 |
column-name | ビュー定義または表定義の列を指定する名前。列名は、表名、ビュー名、相関名または別名で修飾できる。 |
connection-name | 接続を指定する名前。接続は、一連のカーソル、中間結果表、およびアプリケーションと現在アタッチされているデータベース環境のすべてのモジュールに存在するプロシージャ間の関連を指定する。プロシージャの実行時に、接続のコンテキスト内で実行される。 |
constraint-name1 | 制約を指定する名前。制約では、表に格納される値を制限する条件を指定する。列値を挿入および更新すると、SQLにより制約で指定された条件に突き合せて値がチェックされる。値が制約に違反していると、INSERT文、またはUPDATE文は失敗する。 |
correlation-name | SQLに対して結果表を識別する一時名。結果表とは、データ操作を行うためにSQL文で作成される行および列の一時的なセットである。相関名は列名を修飾し、列名が同じであっても異なる結果表の列が区別される。 |
currency-char | 出力に表示する通貨インジケータを指定する。 |
cursor-name | カーソルを指定する名前。カーソルは、プログラムで処理するために結果表の行を識別する。 |
date-number | 日付値の入力形式および表示形式を指定する。
date-number引数には数値を入力する必要がある。この数値は、OpenVMSランタイム・ライブラリ・ドキュメントにリストされている日付書式の論理名の数値に対応する。 |
digit-sep-char | 桁セパレータを表示する出力を指定の文字に変更する。桁セパレータは、999を超える値で3桁のグループに分離する記号である。たとえば、数値1,000ではカンマが桁セパレータになる。 |
domain-name1 | ドメインを指定する名前。ドメイン定義では、データ型とドメイン名を関連付けることによって、表列で保持可能な値セットが制限される。また、ドメイン定義を使用すると、オプションのフォーマット句および照合句を使用できる。表の列定義およびSQLモジュール言語プロシージャのパラメータ宣言では、データ型を指定するかわりにドメインに名前を付けることができる。 |
external-routine-name1 | 外部ファンクションまたは外部プロシージャに割り当てる名前。Oracle Rdbにスキーマ・オブジェクトとして存在する。 |
function-name1 | ストアド・モジュール内のストアド・ファンクションを指定する名前。ストアド・ファンクションには、INパラメータ宣言のみを含めることができる。値式を使用してストアド・ファンクションをコールする場合、ストアド・ファンクション名によってファンクションが識別される。 |
file-spec | データ定義のソースおよびデータベース・ファイルの場所を指定する、完全または部分的なファイル仕様。ファイル仕様名にはASCII英数字を使用する必要がある。ファイル仕様のかわりに論理名を使用できる。 |
index-name1 | 索引を指定する名前。 |
language-name | 日時の入力と表示における月の名前および略称の変換に使用する言語。language-name引数によって、日付リテラルのYESTERDAY、TODAYおよびTOMORROWの変換など、他の言語依存テキストの変換も設定される。language-name引数に有効なエントリは、各国語キャラクタ・セット(NCS)のユーティリティで使用される照合順番の名前である。 |
library-name | デフォルト以外のNCSライブラリの名前。デフォルト(ASCII)のNCSライブラリはSYS$LIBRARY:NCS$LIBRARY。 |
map-name | 表のどの行および列を複数ファイルのデータベースのどの記憶域に格納するかを制御する記憶域マップを指定する名前。 |
module-name | モジュールの名前。
|
ncs-name | デフォルトのNCSライブラリであるSYS$LIBRARY:NCS$LIBRARYまたは引数library-nameで指定されたNCSライブラリの照合順番の名前。照合順番は、事前定義されたNCS照合順番のいずれかまたはNCS照合順番を使用してユーザーが定義したものにできる。 |
parameter | ホスト言語プログラムで宣言されSQL文に関連付けられた変数であり、次を含む。
|
path-name | スキーマ定義のソースを指定するデータ・ディクショナリのフルパス名または相対パス名。パス名にはASCII英数字を使用する必要がある。 |
procedure-name | ストアド・モジュール内のストアド・プロシージャまたは非ストアド・モジュール内の非ストアド・プロシージャを指定する名前。
|
profile-name1 | プロファイルを指定する名前。 |
radix-char | 小数点を表示する出力を指定の文字に変更する。小数点は、数値を小数部分から区別する記号である。たとえば、数値98.6ではピリオドが小数点になる。 |
role-name1 | ロールを指定する名前。 |
schema-name | スキーマを指定する名前。スキーマは、データベース内のデータ定義のグループを指定する。マルチスキーマ・データベースの場合、1つ以上のスキーマがカタログ内でグループ化される。 |
sequence-name1 | 順序を指定する名前。 |
statement-name | 準備されたSQL文を指定する名前。準備された文とは、プログラムの実行中に動的に生成される文である。 |
synonym-name1 | シノニムを指定する名前。 |
table-name1 | データが格納される表を指定する名前。表名を使用して、列名を修飾できる。 |
time-number | 時刻の値の入力形式および表示形式を指定する。
time-number引数には数値を入力する必要がある。この数値は、OpenVMSランタイム・ライブラリ・ドキュメントにリストされている時刻書式の論理名の数値に対応する。 |
trigger-name1 | トリガー定義を指定する名前。表で特定の更新操作が実行された場合、トリガー定義により1つ以上のアクションが発生する。トリガー名はスキーマ内で一意である必要がある。 |
user-name1 | ユーザーを指定する名前。 |
view-name1 | ビューを指定する名前。ビューとは、データが物理的に格納されるのではなく、他の表に格納された行、列またはその両方を参照する表である。ビュー名を使用して、列名を修飾できる。 |
別名とは、データベースの特定のアタッチメントに付ける名前です。別名を明示的に指定すると、プログラムまたは対話型SQL文で複数のデータベースを参照できるようになります。
別名を指定した場合は、以降のSQL文(CREATE DATABASE文の中に含まれているSQL文を除く)でデータベースを参照する場合にその別名を使用する必要があります。複数のデータベースを宣言する場合は、文で参照するデータベースをSQLで認識できるようにするために、別名を使用する必要があります。ATTACH文、CONNECT文、CREATE DATABASE文、CREATE DOMAIN文、CREATE TABLE文、DECLARE ALIAS文、GRANT文、GRANT(ANSIスタイル)文、IMPORT文、REVOKE文またはSET TRANSACTION文を発行する場合は、ファイル仕様またはリポジトリ・パス名の他に別名を指定できます。
SQLでは、データベースをデフォルト・データベースとして宣言する別名を指定できます。デフォルト・データベースを指定すると、データベースのアタッチメント実行中にデフォルト・データベースを参照する後続文で別名の使用が不要になります。
SQLモジュール言語では、モジュール・ヘッダーで指定された別名によってデフォルト・データベースが指定されます。マルチスキーマ・ネーミングを使用していない場合は、プリコンパイルされたSQLプログラムおよび対話型SQLで特殊な別名RDB$DBHANDLEによってデフォルト・データベースが指定されます。マルチスキーマ・データベースで別名を使用するには、モジュール・ヘッダーでQUOTING RULES SQL99句を使用し、第2.2.11項で説明しているデリミタ付き識別子を使用する必要があります。いずれの環境でも、明示的な別名の指定を省略することは、デフォルト・データベースを指定する別名を指定することと同じです。 別名を宣言しない場合は、SQLでは論理名SQL$DATABASEで指定されたデータベース・ファイルがモジュールのコンパイルに使用されます。
デフォルト・データベース以外のデータベースを指定する別名を宣言する場合は、その別名を使用して、SQL文で参照するデータベース・オブジェクト(表、ビュー、索引、ドメイン、記憶域マップ、記憶域)の名前を修飾する必要があります。この別名を省略すると、SQLではデータベース・オブジェクトがデフォルト・データベースの一部であるとみなされます。デフォルト・データベースが存在しない場合に別名を省略すると、SQLはエラーを生成します。別名を使用した表名の修飾例は、第2.2.19項を参照してください。
次の例では、ATTACH文で別名を指定する方法を示します。データベースのうちの1つは空であり、表の一時コピーを人事データベースで作成するために使用します。SHOW DATABASE文を使用してデータベース設定を表示します。
SQL> -- Use the alias empty for the empty database. SQL> -- SQL> ATTACH 'ALIAS empty PATHNAME temp'; SQL> -- SQL> -- Use the alias pers for personnel. SQL> -- SQL> ATTACH 'ALIAS pers PATHNAME personnel'; SQL> -- SQL> -- You must use the alias to qualify table names after you declare SQL> -- an alias. Omitting the alias generates an error. SQL> -- SQL> SELECT * FROM EMPLOYEES; %SQL-F-NODEFDB, There is no default database SQL> SELECT * FROM PERS.EMPLOYEES; EMPLOYEE_ID LAST_NAME FIRST_NAME MIDDLE_INITIAL ADDRESS_DATA_1 ADDRESS_DATA_2 CITY STATE POSTAL_CODE SEX BIRTHDAY STATUS_CODE 00164 Toliver Alvin A 146 Parnell Place Chocorua NH 03817 M 28-Mar-1947 1 . . . |
SQLでは、ユーザーの概要をOracle Rdbに示すために、ストアド・モジュールまたは非ストアド・モジュールに格納されている認可識別子が使用されます。これらのモジュールは、定義者権限または実行者権限のどちらでもかまいません。