以下のサンプルでは、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); }