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

戻る
戻る
 
次へ
次へ
 

2.2 ユーザー指定の名前

ユーザー指定の名前を必要とする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に、構文図で参照されるユーザー指定の名前の簡単な定義を示します。ユーザー指定の名前の詳細は、後続の項で説明します。

表2-5 SQLで使用されるユーザー指定の名前の概要
ユーザー指定の
名前
説明
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 モジュールの名前。

  • 非ストアド・モジュールの場合

    非ストアド・モジュールに割り当てる名前。非ストアド・モジュールには、ホスト言語プログラムからコールされる単一文または複合文のプロシージャを含めることができる。ストアド・モジュールとは異なり、非ストアド・モジュールはSQLモジュール・ファイル内のOracle Rdbデータベースの外部に存在する。module-nameを省略すると、SQLではデフォルトでSQL_MODULEが使用される。

  • ストアド・モジュールの場合

    Oracle Rdbデータベースにスキーマ・オブジェクトとして存在するモジュールに割り当てる名前。ストアド・モジュールには、複合文のプロシージャのみを含めることができる。これは、CALL文を使用する単一文のプロシージャからホスト言語プログラムによってコールされる。CREATE MODULE文でストアド・モジュールを定義する場合は、ストアド・ファンクションと呼ばれるファンクションまたはストアド・プロシージャと呼ばれるプロシージャも定義する。モジュール名の指定は必須であり、指定しないとSQLから例外が返される。

ncs-name デフォルトのNCSライブラリであるSYS$LIBRARY:NCS$LIBRARYまたは引数library-nameで指定されたNCSライブラリの照合順番の名前。照合順番は、事前定義されたNCS照合順番のいずれかまたはNCS照合順番を使用してユーザーが定義したものにできる。
parameter ホスト言語プログラムで宣言されSQL文に関連付けられた変数であり、次を含む。

  • プリコンパイルされたプログラムに存在するホスト言語変数

  • SQLモジュール・プロシージャに存在する仮パラメータ

  • 動的SQLに存在するパラメータ・マーカー

path-name スキーマ定義のソースを指定するデータ・ディクショナリのフルパス名または相対パス名。パス名にはASCII英数字を使用する必要がある。
procedure-name ストアド・モジュール内のストアド・プロシージャまたは非ストアド・モジュール内の非ストアド・プロシージャを指定する名前。

  • ストアド・プロシージャ

    ゼロ個以上のパラメータ宣言および複合文を含めることができる。CALL文を使用してストアド・プロシージャをコールする場合、ストアド・プロシージャ名によってプロシージャが識別される。

  • 非ストアド・プロシージャ

    1つ以上のパラメータ宣言および単一文または複合文を含めることができる。非ストアド・プロシージャ名は、SQLモジュールに対するホスト言語コールで使用される。

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 ビューを指定する名前。ビューとは、データが物理的に格納されるのではなく、他の表に格納された行、列またはその両方を参照する表である。ビュー名を使用して、列名を修飾できる。


1別名を使用して、このオブジェクトを修飾できます。マルチスキーマ・データベースでは、別名、カタログ名、およびスキーマ名を使用してこのオブジェクトを修飾できます。オブジェクトを修飾するには、修飾子およびピリオド(.)を前に付ける必要があります。

2.2.1 別名

別名とは、データベースの特定のアタッチメントに付ける名前です。別名を明示的に指定すると、プログラムまたは対話型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
   .
   .
   .

2.2.2 認可識別子

SQLでは、ユーザーの概要をOracle Rdbに示すために、ストアド・モジュールまたは非ストアド・モジュールに格納されている認可識別子が使用されます。これらのモジュールは、定義者権限または実行者権限のどちらでもかまいません。