修飾されていない名前の解釈 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

CREATE MACROリクエストを実行すると、システムはマクロで指定されたテキストリクエストを構文解析し、それらのリクエストで完全修飾されていない名前を解釈します。マクロのDDLリクエストの修飾されていない名前は解釈されません。

次の例を考えてみます。ユーザーxyzのデフォルトのデータベースはabcであり、ユーザーlmnのデフォルトのデータベースはdefです。ユーザーxyzは、macro_1を次のように定義します。

     CREATE MACRO macro_1 AS (
       CREATE TABLE mambo (
         column_1 INTEGER,
         column_2 INTEGER);
        );

このCREATE TABLEリクエストには、完全修飾テーブル名が指定されていません。

CREATE TABLEはDDL文であるため、それを含むデータベースの名前はマクロの作成時には解釈されません。その名前が解釈されるのは、後にマクロが実行されるときとなります。その結果、マクロは実行時に常に正しいストレージ階層を調べることになります。

以下の表は、この仕組みを示しています。

macro_1という名前のマクロを実行するユーザー mamboという名前のテーブルが作成されるデータベース
xyz abc
lmn def

ユーザーxyzが次のようにmacro_2という名前のマクロを作成するとします。

    CREATE MACRO macro_2 AS (
    UPDATE tango
    SET counter = counter + 1;);

UPDATEリクエストには、完全修飾テーブル名は指定されてない

UPDATE文はDML文なので、macro_2の作成時に完全に処理されます。続いてmacro_2を実行すると、実行したユーザーがabc.tangoabc、または他のどのユーザーであっても、lmnが更新されます。

まとめると、マクロ内で修飾されていない名前を指定する場合、次のルールが適用されます。

  • マクロ定義の中で修飾されていない名前は、マクロの作成時にDDL文に解釈ない。マクロの実行時に初めて解釈されます。
  • マクロ定義の中で修飾されていない名前は、マクロの作成時にDML文に完全に解釈される。