命名規則:UDF、UDM、およびUDTの間で名前の重複を回避する - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage
UDF、UDM、およびUDTの名前の場合:
  • DatabaseID、TVMNameの列ペアは、DBC.TVMテーブル内で固有でなければなりません。DBC.TVMの行を表示するにはDBC.Tables2ビューを使用します。
  • database_name.routine_name(parameter_list)のルーチンのシグネチャは固有でなければなりません。

UDF、UDM、およびUDTは、そのSPECIFIC名および関連したルーチンのシグネチャが異なる限り、同じSQL名を持つことができます。UDTの場合、SPECIFIC名は、UDTそのものではなく(これはSPECIFIC名を持たない)、UDT定義内のいずれかのメソッド シグネチャのSPECIFIC名のことを指します。

UDTに関連するUDFの場合、database_nameは常にSYSUDTLIBになります。これにはUDTのために次の機能を実装するために使用されるUDFも含まれます。
  • キャスト
  • 順序付け
  • データ変換

Database IDの列の項目が常に同じになることを意味します。名前が固有であるかどうかはTVMName列の値にのみ依存しています。

UDTおよびUDMのTVMNameエントリ

次は、UDTとUDMのTVMNameエントリを示しています。

CREATE TYPEリクエストによって作成されるUDTには、指定したUDT名に基づいた、システム生成されたSPECIFIC名があります。オブジェクト名の詳細については、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。

許容文字数を超えるUDT名は、データベースによって切り捨てられてSPECIFIC名が生成されます。

CREATE TYPE文を実行すると、システムは対応するUDFを自動生成し、UDTインスタンスを取得します。

名前の重複を回避するために、UDT、UDM、またはUDFのSPECIFIC名は固有でなければなりません。

外部ルーチンの種類 特定名
UDT 常にそのUDT名。
  • UDM
  • UDF
ユーザー定義。
STRUCTURED型に関してこのルールに以下の2つの例外があります。
  • システム生成のオブザーバー メソッド。
  • システム生成のミュテーター メソッド。

これらのSPECIFIC名は常に、操作するSTRUCTURED型属性の名前と同じになります。

UDMのSPECIFIC名の定義は、その関連UDT内のそのシグネチャの中で行なわれます。CREATE METHOD文の中で定義されるのではないということに注意する必要があります。

外部ルーチンのシグネチャは固有でなければなりません。次のルールが適用されます。
  • 作成するすべてのUDTに関して、システムは次のシグネチャを持つUDFを生成します: SYSUDTLIB.UDT_Name()。

    それ以外のUDFがこのシグネチャを持つことはできません。

  • UDMを作成するとシステムはこれをUDFとして扱い、その最初の引数のデータ型が、このUDMの定義されているUDTと同じであるとします。

    たとえば、circleというUDTの上に定義されるarea()というUDMであれば、そのシグネチャはSYSUDTLIB.area(circle)になります。したがって、それ以外のUDFはこれと同じシグネチャを持てないことになります。

単一データベース(SYSUDTLIB)Teradata UDT環境では、次のルールが適用されます。
  • UDTと、パラメータを持たないSYSUDTLIB UDFとが、同じ名前であってはなりません。
  • STRUCTURED型UDTのメソッドのシグネチャと、そのデータ型のいずれかの属性のオブザーバーまたはミュテーター メソッドのシグネチャが一致する場合、そのメソッドとその属性の名前が同じであってはなりません。

作成するそれぞれのUDTごとにデータ変換グループを定義する必要があります。新しいDISTINCT型UDTを作成するとデータ変換グループがシステムによって自動的に作成されるため、システム生成の変換を削除してからでなければ明示的な変換グループを追加で作成することはできません。UDTデータ変換グループの名前は固有にする必要がないため、すべての変換グループに同じ名前を使うこともできます。

変換グループの名前はDBC.UDTTransformに格納されます。

次を対象にして、システムがDBC.TVMのTVMName列にSPECIFICメソッド名を追加します。
  • STRUCTURED型属性のために自動生成されたオブザーバー メソッドとミュテーター メソッド。
  • CREATE TYPE文、ALTER TYPE文、またはCREATE METHOD文によって作成されたインスタンス メソッドとコンストラクタ メソッド(コーダーがSPECIFICメソッド名を指定しない場合)。

UDT名および属性名に基づいて最大28文字のSPECIFIC名が生成されます。

次の要素を指定の順序でつなぎあわせることによってSPECIFIC名が形成されます。

  1. UDT名の最初の8文字。
  2. 下線文字(_)。
  3. オブザーバ属性名、ミュテーター属性名、インスタンス メソッド名、またはコンストラクタ メソッド名の最初の10文字(必要に応じて)。
  4. 下線文字(_)。
  5. オブザーバー メソッド名、ミュテーター メソッド名、インスタンス メソッド名、またはコンストラクタ メソッド名に割り当てられた、ルーチンIDの最後の8つの16進数値。
  6. 必要に応じて、文字シーケンスが付加されます(オブザーバは_O、ミュテーターは_M、インスタンスは_R、コンストラクタは_C)。

30文字になるまで、残りの文字が空白文字(スペース)で埋められます。