以下のサンプルでは、circle_t UDTからVARCHAR(80)事前定義データ型に変換するためのキャスト機能を実装しています。VARCHAR文字列の形式は次のとおりです。
x:y:r:color
NULL属性は、値の欠如によって示されます。例えば、半径がnullの場合の形式は以下のとおりです。
x:y::color
/* File: c_cast.c */
#define SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include <string.h>
void circle_t_Cast( UDT_HANDLE *circleUdt,
VARCHAR_LATIN *result,
char sqlstate[6])
{
INTEGER x, y, r;
char y_str[11], r_str[11];
VARCHAR_LATIN color[81];
int nullIndicator;
int length;
/* Get each of the attributes and write them to the result string. */
FNC_GetStructuredAttribute(*circleUdt, "x", &x, SIZEOF_INTEGER, &nullIndicator, &length);
if (nullIndicator == 0)
sprintf((char *)result, "%d:", x);
else
strcpy((char *)result, ":");
FNC_GetStructuredAttribute(*circleUdt, "y", &y, SIZEOF_INTEGER, &nullIndicator, &length);
if (nullIndicator == 0) {
sprintf(y_str, "%d", y);
strcat((char *)result, y_str);
}
strcat((char *)result, ":");
FNC_GetStructuredAttribute(*circleUdt, "radius", &r, SIZEOF_INTEGER, &nullIndicator, &length);
if (nullIndicator == 0) {
sprintf(r_str, "%d", r);
strcat((char *)result, r_str);
}
strcat((char *)result, ":");
FNC_GetStructuredAttribute(*circleUdt, "color", color, SIZEOF_VARCHAR_LATIN_WITH_NULL(80), &nullIndicator, &length);
if (nullIndicator == 0)
strcat((char *)result, (char *)color);
}