テーブルの参照の解釈 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage
修飾されていないテーブルの名前が検出されると、以下のすべてのデータベースでその名前のテーブルが検索されます。
  • デフォルト データベース
  • SQLリクエストで参照されているすべてのデータベース
  • ログオン ユーザー データベースの中のその名前の揮発テーブル

検索処理では、これらのデータベースの任意の1つだけでそのテーブル名を検出する必要があります。複数のデータベースでそのテーブル名が検出された場合は、データベースからテーブル名が曖昧であることを示すエラー メッセージが返されます。

以下の例では、修飾されていないテーブルの名前を揮発テーブルで使用することの結果を示しています。
  • 修飾されていない名前のテーブルがログオン ユーザー データベース内の揮発テーブルであって、他のデータベースにその名前のテーブルがない場合は、デフォルトでログオン ユーザー データベース内の揮発テーブルが参照されます。
    .LOGON u1
    
    CREATE VOLATILE TABLE volatile_table_1 (
      f1 INTEGER,
      f2 INTEGER)
    ON COMMIT PRESERVE ROWS;
    
    DATABASE db1;
    
    INSERT volatile_table_1 (1,1);


    ここでは、参照はu1.vt1 ユーザー データベースの揮発テーブルu1.vt1に対して行なわれ、現行のデフォルト データベースdb1を参照するわけではありません。

  • 修飾されていない名前のテーブルがログオン ユーザー データベース内の揮発テーブルで、別のデータベースにもその名前のテーブルがある場合、次のような曖昧なテーブル名エラーが生じます。
    .LOGON u1
    
    CREATE VOLATILE TABLE volatile_table_1 (
      f1 INTEGER,
      f2 INTEGER)
     ON COMMIT PRESERVE ROWS;
    
     DATABASE db1;
    
     CREATE TABLE volatile_table_1 (
       g1 INTEGER,
       g2 INTEGER);
    
    INSERT INTO volatile_table_1 VALUES (1,1);

    INSERT操作はエラー メッセージをリクエスト側に返します。volatile_table_1という名前のテーブルはログオン ユーザー データベースu1に既に存在しているからです。

  • 修飾されていないテーブル名が、ログオン ユーザー データベースの揮発テーブルと永久テーブルに一致した場合、揮発テーブルがデフォルトで参照されます。

    このような状況は、ユーザーがセッション1で揮発テーブルを作成し、セッション2でそのユーザー データベースの中に同じ名前の永久テーブルを作成したような場合に発生します。セッション1で修飾しないでその名前を参照した場合は、デフォルトで揮発テーブルの方が参照されます。セッション2からは、セッション1の揮発テーブルが見えません。したがって、セッション2で修飾しないでその名前を参照した場合は、デフォルトで永久テーブルが参照されます。