Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


1.1.8 名前の修飾

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

〈この項の構成〉

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

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

表名:

表識別子を認可識別子で修飾したもの

インデクス名:

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

インデクス型名:

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

ユーザ定義型名:

データ型識別子を認可識別子で修飾したもの

ルーチン名:

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

トリガ名:

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

順序数生成子名:

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

表名::=〔認可識別子.〕表識別子

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

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

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

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

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

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

指定項目

指定内容

規 則

認可識別子

指定する表識別子,インデクス識別子,インデクス型識別子,データ型識別子,ルーチン識別子,及びトリガ識別子が自分のものであれば,自分の認可識別子を指定します。他ユーザが所有するものであれば,そのユーザの認可識別子を指定します。ただし,表識別子にパブリックビュー,ルーチン識別子にパブリック手続き,パブリック関数の名前を指定する場合は,PUBLICを指定します。

なお,PUBLICの指定は,引用符で囲んだ指定,及び引用符で囲まない指定のどちらでも指定できます。

認可識別子を省略※3すると,次のとおりに仮定されます。

  • ユティリティの実行時

    ユティリティを起動するユーザの認可識別子

  • UAPの実行時※1

    UAPで認可識別子を省略すると,次の順で仮定されます。

  1. プリプロセスで指定した認可識別子

  2. CONNECT文のオペランドで指定した認可識別子

  3. CONNECT文のオペランドで指定がなかった場合は,クライアント環境定義PDUSERで指定した認可識別子

  4. PUBLIC(表識別子,ルーチン識別子※2を指定した場合)

表識別子

実表又はビュー表の名前を指定します。

インデクス識別子

インデクスの名前を指定します。

インデクス型識別子

インデクス型の名前を指定します。

データ型識別子

ユーザ定義型の名前を指定します。

ルーチン識別子

手続き又は関数の名前を指定します。

トリガ識別子

トリガの名前を指定します。

順序数生成子識別子

順序数生成子の名前を指定します。

注※1

定義系SQL,PREPARE文,又はEXECUTE IMMEDIATE文で指定したSQLの文字列中で認可識別子を省略した場合,次に示す順位で認可識別子が仮定されます。

  1. CONNECT時の認可識別子

  2. クライアントの環境変数に設定された認可識別子

  3. UAP実行ユーザ

  4. PUBLIC(定義系SQL以外で表識別子,ルーチン識別子を指定した場合)

注※2

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

注※3

定義系SQLで他ユーザが所有するものを操作する場合,SQLの文字列中で認可識別子を省略したときは,所有者の認可識別子が仮定されます。

例えば,次の例では,1のSQL文は2のSQL文のように認可識別子が仮定されます。

(例)

ユーザ(認可識別子:USER007)のインデクス(I001)を表(T002)に作成します。

  1. CREATE INDEX USER007.I001 ON T002(C001)

  2. CREATE INDEX USER007.I001 ON USER007.T002(C001)

(2) 表指定

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

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

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

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

(3) 列指定

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

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

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

添字::={整数|ANY}

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