PERIOD型の戻り値を設定するには、次のようにします。
- SQL要素型にマッピングされるCデータ型で表現されるのと同様に、PERIOD型の最初と最後の境界までを格納するのに十分なバッファを割り当てます。
例えば、PERIOD(TIME WITH TIME ZONE)戻り型を指定するCREATE FUNCTION文を例に考えてみましょう。戻り値を設定するには、関数が2つのANSI_Time_WZoneの値を格納するのに十分な領域のバッファを割り当てる必要があります。ここで、ANSI_Time_WZoneはCデータ型で、TIME WITH TIME ZONEにマッピングされます。
- 戻り値をバッファに入れます。
- 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); ... }