PERIOD型の結果の値の設定 - 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/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

PERIOD型の戻り値を設定するには、次のようにします。

  1. SQL要素型にマッピングされるCデータ型で表現されるのと同様に、PERIOD型の最初と最後の境界までを格納するのに十分なバッファを割り当てます。

    例えば、PERIOD(TIME WITH TIME ZONE)戻り型を指定するCREATE FUNCTION文を例に考えてみましょう。戻り値を設定するには、関数が2つのANSI_Time_WZoneの値を格納するのに十分な領域のバッファを割り当てる必要があります。ここで、ANSI_Time_WZoneはCデータ型で、TIME WITH TIME ZONEにマッピングされます。

  2. 戻り値をバッファに入れます。
  3. FNC_SetInternalValueを呼び出して、PERIOD型の結果の値を割り当てたバッファ内の戻り値に設定します。

FNC_SetInternalValueの詳細については、Cライブラリ関数を参照してください。

次のサンプル コードは、PERIOD(DATE)の結果の値を設定するコードの抜粋です(UDFが定義されているため、結果としてNULL値を返すこともできる点に留意してください)。

void set_duration( DATE       *date1,
                   DATE       *date2,
                   PDT_HANDLE *result,
                   int        *date1IsNull,
                   int        *date2IsNull,
                   int        *resultIsNull,
                   char        sqlstate[6])
                   SQL_TEXT    extname[129],
                   SQL_TEXT    specific_name[129],
                   SQL_TEXT    error_message[257] )
{
    DATE new_duration[2];

    /* Set the value of the PERIOD(DATE) result. */
    if (*date2 > *date1)
    {
       new_duration[0] = *date1;
       new_duration[1] = *date2;
    }
    else if (*date1 > *date2)
    {
       new_duration[0] = *date2;
       new_duration[1] = *date1;
    }
    else
    {
       strcpy(sqlstate, "22023");
       strcpy((char *) error_message,
          "PERIOD element values cannot be equal.") ;
       *resultIsNull = -1;
       return;
    }

    FNC_SetInternalValue(*result, &new_duration[0], SIZEOF_DATE*2);

    ...
}