parameter_name - Teradata Database - Teradata Vantage NewSQL Engine - parameter_name 、CREATE MACRO SQL文とREPLACE MACRO SQL文。

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

マクロの実行中に値で置き換えられるパラメータの名前。UDT列とTOP n演算子は有効なパラメータです。

データベース オブジェクトの命名ルールについては、<Teradata Vantage™ SQL基礎、B035-1141>を参照してください。

パラメータは、データ値に制限されます。データベース オブジェクト名をパラメータ化することはできません。

マクロ本体で参照される時には、パラメータ名の前にコロン(:)文字を付ける必要があります。

type_declaration
パラメータのデータ定義またはデフォルトの定義。
デフォルト値を割り当てない場合は、EXECUTE時にパラメータの値を指定する必要があります。
UDTは有効なデータ型です。
CHARACTER、VARCHAR、LONGVARCHAR、GRAPHIC、VARGRAPHIC、またはCLOBデータにKANJI1の文字サーバー データ セットを指定することはできません。作成しようとすると、Teradata Databaseはリクエストをアボートして要求元にエラーを返します。
データ型のリストについては、<Teradata Vantage™データ タイプおよびリテラル、B035-1143>を参照してください。
type_attribute
NOT NULL、UPPERCASE、TITLEなどのデータ型属性。
マクロ パラメータでは次の列属性は無効です。
  • CHECK制約
  • COMPRESS句
データ型属性のリストについては、<Teradata Vantage™データ タイプおよびリテラル、B035-1143>を参照してください。

例: 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; );