スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

1.1.8 名前の修飾

名前の修飾は,ピリオド(.)によってRDノード名称認可識別子表識別子などを連結して,認可識別子を明示したり,名前を一意にしたりするときに使用します。

<この項の構成>
(1) 表名,インデクス名,インデクス型名,ユーザ定義型名,ルーチン名,トリガ名,及び順序数生成子名
(2) 表指定
(3) 列指定

(1) 表名,インデクス名,インデクス型名,ユーザ定義型名,ルーチン名,トリガ名,及び順序数生成子名

それぞれの名前の内容と形式を次に示します。

表名
表識別子をRDノード名称と認可識別子で修飾したもの

インデクス名
インデクス識別子を認可識別子で修飾したもの

インデクス型名
インデクス型識別子を認可識別子で修飾したもの

ユーザ定義型名
データ型識別子を認可識別子で修飾したもの

ルーチン名
ルーチン識別子を認可識別子で修飾したもの

トリガ名
トリガ識別子を認可識別子で修飾したもの

順序数生成子名
順序数生成子識別子を認可識別子で修飾したもの

表名::=〔〔RDノード名称.〕認可識別子.〕表識別子

インデクス名::=〔認可識別子.〕インデクス識別子

インデクス型名::=〔認可識別子.〕インデクス型識別子

ユーザ定義型名::=〔認可識別子.〕データ型識別子

ルーチン名::=〔認可識別子.〕ルーチン識別子

トリガ名::=〔認可識別子.〕トリガ識別子

順序数生成子名::=〔認可識別子.〕順序数生成子識別子

指定項目 指定内容 規 則
認可識別子 指定する表識別子,インデクス識別子,インデクス型識別子,データ型識別子,ルーチン識別子,及びトリガ識別子が自分のものであれば,自分の認可識別子を指定します。他ユーザが所有するものであれば,そのユーザの認可識別子を指定します。ただし,表識別子にパブリックビュー,ルーチン識別子にパブリック手続き,パブリック関数の名前を指定する場合は,PUBLICを指定します。なお,PUBLICの指定は,引用符で囲んだ指定および引用符で囲まない指定のどちらも指定可能です。 認可識別子を省略すると,次のとおりに仮定されます。
  • ユティリティの実行時
    ユティリティを起動するユーザの認可識別子
  • UAPの実行時1
    UAPで認可識別子を省略すると,次の順で仮定されます。
  1. プリプロセスで指定した認可識別子
  2. CONNECT文のオペランドで指定した認可識別子
  3. CONNECT文のオペランドで指定がなかった場合は,クライアント環境定義PDUSERで指定した認可識別子
  4. PUBLIC(表識別子,ルーチン識別子※2を指定した場合)
RDノード名称 リモートデータベースアクセスをする場合,RDノード名称を指定します。RDノード名称を省略した場合,ローカルアクセスになります。
表識別子 実表,外部表,又はビュー表の名前を指定します。
インデクス識別子 インデクス又は外部インデクスの名前を指定します。
インデクス型識別子 インデクス型の名前を指定します。
データ型識別子 ユーザ定義型の名前を指定します。
ルーチン識別子 手続き又は関数の名前を指定します。
トリガ識別子 トリガの名前を指定します。
順序数生成子識別子 順序数生成子の名前を指定します。

注※1
定義系SQL,PREPARE文,又はEXECUTE IMMEDIATE文で指定したSQLの文字列中で認可識別子を省略した場合,次に示す順位で認可識別子が仮定されます。
  1. CONNECT時の認可識別子
  2. クライアントの環境変数に設定された認可識別子
  3. UAP実行ユーザ
  4. PUBLIC(定義系SQL以外で表識別子,ルーチン識別子を指定した場合)

注※2
ルーチン識別子の場合の認可識別子MASTERに関しては,「1.1.9 スキーマパス」を参照してください。

(2) 表指定

表指定は,一つのSQL文中に二つ以上の表を指定する場合に,指定する列,*,又はROWがどの表に対応するかを一意にするための修飾子で,表名,又は相関名を指定します。

相関名とは,同じ表同士の結合をしたい場合,及び同じ表を副問合せ中で指定し,その問合せ中で外側の問合せの表の列も参照する場合に,指定するそれらの表の別名として使用します。相関名を指定すると,一つの表を二つの異なる表として使用できます。

 

表指定::={RDノード名称.認可識別子.表識別子|修飾なし表指定}

修飾なし表指定::={〔認可識別子.〕表識別子|相関名|問合せ名}

 

WITH句を用いた問合せ式の問合せ式本体中の一つのFROM句に,WITH句に指定した問合せ名と,その問合せ名と同じ表識別子を指定する場合は,表識別子を認可識別子で明示的に修飾し,更にその問合せ名,及び表識別子に相関名を指定して名前を区別する必要があります。

WITH句を用いた問合せ式の問合せ本体中の表指定では,名前を認可識別子で修飾した場合,その名前を表識別子として扱い,名前を認可識別子で修飾しない場合,その名前を問合せ名,又は表識別子として扱います。ただし,名前を認可識別子で修飾しない場合の名前の優先順位は,問合せ名,表識別子の順になります。

表指定での修飾例を次に示します。

(例1)
複数の表(ZAIKO,JUTYU)にある同じ名前の列(SCODE)を参照するために,表名(ZAIKO)で修飾する場合
 
  SELECT ZAIKO.SCODE,SNAME,TCODE
      FROM ZAIKO,JUTYU
      WHERE ZAIKO.SCODE = JUTYU.SCODE
 

(例2)
同じ表(ZAIKO)同士の結合で,相関名(X,Y)を使用して修飾する場合
(商品コード101Mと同じ色の商品を検索します)
 
  SELECT X.* FROM ZAIKO X,ZAIKO Y
      WHERE X.COL = Y.COL AND Y.SCODE = '101M'
 

(例3)
相関名を使用して,長い名称の表名に対する記述を簡略化する場合
(ディクショナリ表から,自分の所有する表(ZAIKO)が格納されているRDエリアの名称を検索します)
 
  SELECT X.RDAREA_NAME
      FROM MASTER.SQL_RDAREAS X,
      MASTER.SQL_TABLES Y
      WHERE Y.TABLE_SCHEMA = 'U'
      AND Y.TABLE_NAME = 'ZAIKO'
      AND X.RDAREA_NAME = Y.RDAREA_NAME
 

(例4)
WITH句を用いた問合せ式で,問合せ式本体中の一つのFROM句にWITH句中の問合せ名(ZAIKO)と,その問合せ名と同じ名称の表識別子(ZAIKO)を指定する場合
 
  WITH ZAIKO(QC1,QC2) AS (SELECT SCODE,TANKA*ZSURYO FROM ZAIKO)
      SELECT * FROM ZAIKO X,USER1.ZAIKO Y

(例5)
リモートデータベースアクセスするノードのRDノード名称を指定する場合
(RDノード名称を指定するSQL文で列名を指定する場合,表名まで相関名として使用します。相関名を使用して修飾すると,RDノード名称が変更されてもFROM句を変更するだけです)
 
  SELECT X.ENO
      FROM OSAKA.USER1.EMP X
      WHERE X.ENAME = N'イトウ エイイチ'
 

(3) 列指定

次の場合,列名又は繰返し列名を修飾なし表指定で修飾する必要があります。この修飾された列名又は繰返し列名を列指定といいます。

ただし,列名は構文上,修飾できる場合とできない場合があります。各形式中の「列指定」と記述している箇所は,列名に修飾できます。「列名」と記述している箇所は,修飾できません。

 

列指定::=〔修飾なし表指定.〕{列名|繰返し列名〔[添字]〕}

添字::={整数|ANY}

 

列名を修飾なし表指定で修飾する場合,次に示す規則があります。