ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# 2.2 ユーザー指定の名前

ユーザー指定の名前を必要とするSQL文の構文を満たす名前（識別子）を指定する必要があります。文の構文図では、ユーザー指定の名前は小文字で示されます。

ユーザー指定の名前は、次の要件を満たしている必要があります。

- 31オクテット（8ビット文字）を超えていないこと。

- 次のいずれかのルールに準拠していること。

  - 識別子のキャラクタ・セットがMCSの場合、名前には英数字のみが含まれ、大文字または小文字のアルファベット文字で始める必要があります。 英数字とは、発音区別符号（À）、数字、ドル記号（$）、およびアンダースコア（_）を含む大文字または小文字のアルファベット文字（A、a）です。
    大文字と小文字は同様に処理されます。
    ドル記号は名前に有効な文字ですが、競合を回避するため使用しないでください。
    ユーザー指定の名前を数字で始めることはできません。

  - 識別子のキャラクタ・セットがDEC_MCS以外の場合、そのキャラクタ・セットの標準で定義されている文字の有効な順序のみを含めることができます。各キャラクタ・セットの標準の詳細は、第2.1節を参照してください。

  - 名前にはデリミタ付き識別子を使用できます。デリミタ付き識別子とは、二重引用符（"）で囲まれたユーザー指定の名前のことです。英数字、特殊文字、制御文字、空白を含めることができ、これらの文字で始めることもできます。2つの引用符（"）を続けて入力して、引用符をデリミタ付き識別子に含めることができます（次の例を参照）。後続の空白には意味はありません。特殊文字のリストは、第2.4.2.1項を参照してください。アルファベット文字は大文字でも小文字でもかまいません。次の例では、デリミタ付き識別子の様々なバリエーションを示します。

        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引用は、次の方法で有効にできます。

  - 対話型SQLでSET QUOTING RULES文およびSET DIALECT 'SQL99'文を使用します。

  - SQLモジュール・ファイル内でQUOTING RULES句を使用して、コンパイル時にANSI/ISO SQL引用を有効にします。

  - プリコンパイルするプログラムに埋め込まれたDECLARE MODULE文でQUOTING RULES句を使用します。

キーワードをユーザー指定の名前に使用する場合は、引用ルールまたは言語を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に示すために、ストアド・モジュールまたは非ストアド・モジュールに格納されている認可識別子が使用されます。これらのモジュールは、定義者権限または実行者権限のどちらでもかまいません。