STRUCTURED型UDTを作成すると、システムはUDTの各属性に対してオブザーバー メソッドとミュテーターメソッドを自動的に生成します。
属性の値を問い合わせるには、その属性と同じ名前のオブザーバー メソッドを使用します。
オブザーバー メソッドは、関連付けられている属性の現在の値を返します。オブザーバー メソッドはパラメータを指定せずに呼び出します。たとえば、次のようにします。
SELECT column_name.attribute_name() FROM udt_table;
Teradata Databaseでは、オブザーバー メソッド名の後に空の括弧が必要です。現行のANSI SQL規格では、空の括弧はオプションで定義しますが、既存のアプリケーションとの互換性を保持するには、空の括弧は必須です。
属性の値を更新したり、STRUCTURED型UDTで定義されている列を含む行を挿入したりするには、その属性と同じ名前のミュテーター メソッドを使用します。
ミュテーター メソッドは、1つのパラメータに属性の新しい値を指定して呼び出します。ミュテーター メソッドは、STRUCTURED型UDTの新しいインスタンスを返します。このインスタンスは入力UDTと同一ですが、指定した属性のみパラメータの値に設定されます。
次に、UPDATEリクエストでのミュテーター呼び出しの例を示します。
UPDATE udt_table SET column_name = column_name.attribute_name(new_attribute_value);
複数のミュテーター メソッドを同時に呼び出して、1つの式で異なる複数の属性を初期化することができます。
次に、INSERTリクエストでこの方法を使用した例を示します。
INSERT INTO table1 VALUES (column_1_value, udt_name().attr_1(attr_1_value).attr_2(attr_2_value));
このINSERTリクエストのUDT式は、次の順序で実行されます。
- コンストラクタ関数udt_name()が呼び出されます。
結果はデフォルトのUDTインスタンスです。
- 属性1のミュテーター メソッドが呼び出されます。
結果は、attr_1がattr_1_valueに設定されたUDTインスタンスです。
- ミュテーター メソッドattr_2が呼び出されます。
結果は、attr_2がattr_2_valueに設定されたUDTインスタンスです。
- 最終結果は、attr_1がattr_1_valueに設定され、attr_2がattr_2_valueに設定されたUDTインスタンスとなります。
ミュテーターはメソッドであり、他のメソッドやUDFと同じルーチン解釈ルールがあることに注意してください。
UDFには、事前定義データ型パラメータとの互換性に制限があります。たとえば、本来UDFはTeradata事前定義データ型から事前定義データ型への暗黙の変換をほとんどサポートしていません。ミュテーターを呼び出す場合は、ミュテーター パラメータ データ型を宣言済みの属性値タイプと同じになるように明示的にキャストするのが最善の方法です。