マクロの実行中に値で置き換えられるパラメータの名前。UDT列とTOP n演算子は有効なパラメータです。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ SQL基礎、B035-1141>を参照してください。
パラメータは、データ値に制限されます。データベース オブジェクト名をパラメータ化することはできません。
マクロ本体で参照される時には、パラメータ名の前にコロン(:)文字を付ける必要があります。
- type_declaration
- パラメータのデータ定義またはデフォルトの定義。
- type_attribute
- NOT NULL、UPPERCASE、TITLEなどのデータ型属性。
例: UDTパラメータのマクロ サポート
この例では、マクロのp2パラメータはVARCHARで、このパラメータはマクロに渡されます。変換は、NEWコンストラクタ式を使用してマクロ自体の内部で実行されます。<Teradata Vantage™ SQL演算子およびユーザー定義関数、B035-1210>の「NEW」を参照してください。
CREATE MACRO m2 (p1 integer, p2 VARCHAR(100)) AS (INSERT t1(:p1, NEW structured_type(:p2));); USING (a INTEGER, b VARCHAR(100)) EXEC m2(:a, :b);
例: トリガーによるUDTパラメータのマクロ サポート
mailing_addressesというテーブルに新規顧客の名、姓、および自宅の住所を挿入するins_mail_listというマクロがあるとします。顧客の自宅の住所の値は、addressというSTRUCTURED型UDTを使って定義されます。
そのマクロは、次のように定義されます。
CREATE MACRO insert_mail_list (first VARCHAR(15), last VARCHAR(15), addr address) AS (INSERT INTO mailing_addresses VALUES (:first, :last, :addr););
次のトリガーは、新規顧客行が顧客表に挿入されるたびにcustomerの新規顧客をメーリング リストに追加します。mailing_addresses表への挿入は、トリガーされるSQLアクション文、マクロinsert_mail_listを使って行なわれますが、これはUDTパラメータaddressを受け取ります。
CREATE TRIGGER ca_mailing_list AFTER INSERT ON customer REFERENCING NEW AS newrow FOR EACH ROW WHEN (newrow.address.state() = 'CA') EXEC insert_mail_list(newrow.name.last(), newrow.name.first(), newrow.address);
例: TOPnの値をパラメータとしてマクロに渡す
この例では、TOP n演算子のnの整数値を、pという名前のパラメータとしてマクロに渡します。
CREATE MACRO m (p INTEGER) AS (SELECT TOP :p x1 FROM t1;);
例: パラメータを使用したトランザクション用クエリー バンドの設定
次のマクロは、パラメータqbinを使用してトランザクション用クエリー バンドを設定します。
CREATE MACRO qbmac (p1 INTEGER, p2 INTEGER, qbin VARCHAR(200) AS (SET QUERY_BAND = :qbin FOR TRANSACTION SELECT GetQueryBand();); *** Macro has been created. *** Total elapsed time was 1 second. EXEC qbmac (5,10,'music=classical;musician=david_tudor;'); *** Set QUERY_BAND accepted. *** Total elapsed time was 1 second. *** Query completed. One row found. One column returned. GetQueryBand() -------------------------------------------------------- =T> music=classical;musician=david_tudor;
例: マクロ定義からのSQL UDFの呼び出し
次の例では、マクロcommon_value_expressionの定義内でカプセル化されたSELECTリクエスト内からSQL UDFm1を呼び出します。
CREATE MACRO m1 (a1 INTEGER, b1 INTEGER, c1 INTEGER) AS (SELECT test.common_value_expression(:a1 = :b1) FROM t1 WHERE t1.a1 = :c1; );