マクロには、明示的に[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のサーバー文字セットを持つ文字データ型は指定できません。