UDTのSQLプロシージャ サポート - 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

プロシージャ内でUDTを正しく操作するには、UDTの必須の順序付けとデータ変換機能を定義しておく必要があります。さらに、tosqlおよびfromsqlデータ変換ルーチンを、事前定義データ型からUDTへ、およびUDTから事前定義データ型への等価の暗黙キャスト定義のセットによって複製する必要があります。これはCREATE TRANSFORM文とCREATE CAST文の両方で同じルーチンを参照することによって行なえます。

DISTINCT型UDTでシステム生成の機能を使用する計画の場合、追加作業を行なう必要はありません。変換および暗黙的キャスティング機能がすでに定義されているからです。STRUCTURED型UDTの場合には、次の例で示されているようにデータ変換およびキャスト機能を明示的に定義しなければなりません。

/* Transform Functionality */
    CREATE TRANSFORM FOR address ClientIO (
      TO SQL WITH SPECIFIC FUNCTION SYSUDTLIB.stringToAddress,
      FROM SQL WITH SPECIFIC METHOD toString);

/* Implicit Cast To Back Up The ToSql Functionality */
    CREATE CAST ( Varchar(100) AS address )
      WITH SPECIFIC FUNCTION SYSUDTLIB.stringToAddress
      AS ASSIGNMENT;

/* Implicit Cast To Back Up The FromSql Functionality */
    CREATE CAST (address AS Varchar(100))
      WITH SPECIFIC METHOD  ToString
      AS ASSIGNMENT;

VARIANT_TYPE UDTデータ型だけを使用する入力パラメータは、プロシージャ定義の本体内でのみ宣言できるため、システムは実行時にNEW VARIANT_TYPE式(<Teradata Vantage™ - SQL演算子およびユーザー定義関数、B035-1210>の「NEW_VARIANT TYPE」を参照)を使用して、このパラメータ位置に動的UDTデータ型を渡します。VARIANT_TYPEデータ型を持たせるために、プロシージャ自体にINパラメータ データ型を宣言することはできません

いずれのパラメータに対しても、そのデータ型をTD_ANYTYPEにするよう宣言することはできません。

次のDML文のSQLプロシージャ サポートの詳細について、<Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL、B035-1148>を参照してください。
  • UDTローカル変数に対するSELECT INTO操作。

    UDTローカル変数に対してSELECT INTO操作が可能です。INTOリストには式を指定できません。

  • UDTローカル変数に対するFETCH INTO操作。

    UDTローカル変数に対してFETCH INTO操作が可能です。INTOリストには式を指定できません。

    事前定義型に対してFETCH INTOをしようとしてもFETCH INTO操作は実行できず、100%同一ではないUDT型が関係するFETCH INTO操作も実行できません。つまり、これらの操作では暗黙キャストは適用されません。

  • UDTローカル変数に対するINSERT INTO操作。

    テーブルのUDTローカル変数に対するINSERT INTO操作は可能ですが、メソッドがINTO句内で呼び出される場合、そのローカル変数でそのメソッドを呼び出すことはできません。