マクロ定義とサーバー文字セット - 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

マクロには、明示的に[VAR]CHARACTER(n) [CHARACTER SET …]句を含めることができます。サーバー文字セット(CHARACTER SET LATINなど)が指定されない場合、マクロ定義は[VAR]CHARACTER (n)句を展開します。

展開は、以下のルールに従って行なわれます。
  • 句がマクロ パラメータに適用される場合には、マクロの作成者または変更者ユーザーのデフォルトのサーバー文字セット(作成者ユーザーのデフォルトのサーバー文字セットが使用されます)。

    例えば、作成者ユーザーのデフォルトのサーバー文字セットがUnicodeである場合には、マクロは、このすぐ下の例に示すように展開されます。

    元のマクロ定義は、以下の通りです。

         CREATE MACRO mm AS (
           column_a CHARACTER(5))
           (SELECT :column_a;);

    展開されたマクロ定義は、以下の通りです。

         CREATE MACRO mm AS (
           column_a CHARACTER(5) CHARACTER SET  UNICODE)
          (SELECT :column_a;);
  • 句がマクロ内の式に適用される場合に、式がCHARACTERタイプであれば、式のサーバー文字セットが使用されます。そうでない場合、サーバー文字セットは、作成者ユーザーのデフォルトのサーバー文字セットに設定されます。

    例えば、作成者ユーザーのデフォルトのサーバー文字セットがUNICODEの場合には、マクロの実行時には、このすぐ下の例に示すように修飾されます。

    元のマクロ定義は、以下の通りです。

         CREATE TABLE table_2 (
           ck CHARACTER(5) CHARACTER SET KANJI1);
    
         CREATE MACRO mm AS (
           SELECT ck (CHARACTER(6))
           FROM table_2;);

    修飾されたマクロ定義は、以下の通りです。

         SELECT ck (CHARACTER(6), CHARACTER SET KANJI1)
         FROM table_2;

    以下のマクロが実行されると、それは、その下に示すSELECTリクエストのように修飾されます。

    元のマクロ定義は、以下の通りです。

         CREATE MACRO mm AS (
           SELECT 123 (CHARACTER(12)););

    修飾されたマクロ定義は、以下の通りです。

         SELECT 123 (CHARACTER(6), CHARACTER SET  UNICODE);
  • マクロに、文字定義を伴うCREATE TABLEまたはCREATE VIEWが含まれており、CHARACTER SET句が省略されている場合には、マクロの展開では、マクロを実行したユーザーのデフォルトのサーバー文字セットが使用されます。

    例えば、作成者ユーザーのデフォルトのサーバー文字セットがUNICODEであると仮定します。以下のマクロ定義が、ユーザーのデフォルトのサーバー文字セットがLATINである異なるユーザーによって実行されると、table_1は、このすぐ下の例に示すように作成されます。

    元のマクロ定義は、以下の通りです。

         CREATE MACRO tt AS (
           CREATE TABLE table_1
           (column_l CHARACTER(5)););

    展開されたマクロ定義は、以下の通りです。

         CREATE TABLE table_1 (
           column_l CHARACTER(5) CHARACTER SET LATIN NOT CASESPECIFIC);

    同じことが、CREATE MACRO文内のCREATIVE VIEW文に適用されます。

KANJI1のサーバー文字セットを持つ文字データ型は指定できません。