Teradata-macros

提供:Dev Guides
移動先:案内検索

Teradata-マクロ

マクロは、マクロ名を呼び出して保存および実行されるSQLステートメントのセットです。 マクロの定義はデータディクショナリに保存されます。 ユーザーは、マクロを実行するためのEXEC権限のみが必要です。 ユーザーは、マクロ内で使用されるデータベースオブジェクトに対する個別の特権を必要としません。 マクロ文は単一のトランザクションとして実行されます。 マクロ内のSQLステートメントの1つが失敗すると、すべてのステートメントがロールバックされます。 マクロはパラメーターを受け入れることができます。 マクロにはDDLステートメントを含めることができますが、これはマクロの最後のステートメントでなければなりません。

マクロを作成する

マクロは、CREATE MACROステートメントを使用して作成されます。

構文

以下は、CREATE MACROコマンドの一般的な構文です。

CREATE MACRO <macroname> [(parameter1, parameter2,...)] (
   <sql statements>
);

次のEmployeeテーブルを検討してください。

EmployeeNo FirstName LastName BirthDate
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

次の例では、Get_Empというマクロを作成します。 従業員テーブルからレコードを取得するための選択ステートメントが含まれています。

CREATE MACRO Get_Emp AS (
   SELECT
   EmployeeNo,
   FirstName,
   LastName
   FROM
   employee
   ORDER BY EmployeeNo;
);

マクロの実行

マクロはEXECコマンドを使用して実行されます。

構文

EXECUTE MACROコマンドの構文は次のとおりです。

EXEC <macroname>;

次の例は、Get_Empというマクロ名を実行します。次のコマンドを実行すると、従業員テーブルからすべてのレコードが取得されます。

EXEC Get_Emp;
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo             FirstName                      LastName
-----------  ------------------------------  ---------------------------
   101                  Mike                          James
   102                  Robert                        Williams
   103                  Peter                         Paul
   104                  Alex                          Stuart
   105                  Robert                        James

パラメータ化されたマクロ

Teradataマクロはパラメーターを受け入れることができます。 マクロ内では、これらのパラメーターは;で参照されます。 (セミコロン)。

以下は、パラメーターを受け入れるマクロの例です。

CREATE MACRO Get_Emp_Salary(EmployeeNo INTEGER) AS (
   SELECT
   EmployeeNo,
   NetPay
   FROM
   Salary
   WHERE EmployeeNo = :EmployeeNo;
);

パラメータ化されたマクロの実行

マクロはEXECコマンドを使用して実行されます。 マクロを実行するにはEXEC権限が必要です。

構文

EXECUTE MACROステートメントの構文は次のとおりです。

EXEC <macroname>(value);

次の例は、Get_Empというマクロ名を実行します。パラメーターとして従業員番号を受け入れ、その従業員の従業員テーブルからレコードを抽出します。

EXEC Get_Emp_Salary(101);
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.

EmployeeNo      NetPay
-----------  ------------
   101           36000