color_t DISTINCT型UDTと、circle_t STRUCTURED型UDTのSQL定義を以下に示します。
CREATE TYPE color_t AS VARCHAR(30) FINAL; CREATE TYPE circle_t AS (x INTEGER, y INTEGER, radius INTEGER, color color_t) NOT FINAL;
次のCREATE FUNCTION文は、関数をインストールします。
CREATE FUNCTION circle_t_ToSql( p1 VARCHAR(80) ) RETURNS circle_t NO SQL PARAMETER STYLE TD_GENERAL DETERMINISTIC LANGUAGE C EXTERNAL NAME 'CS!c_tosql!udfsrc/c_tosql.c!F!circle_t_ToSql'; CREATE FUNCTION circle_t_FromSql( p1 circle_t ) RETURNS VARCHAR(80) NO SQL PARAMETER STYLE TD_GENERAL DETERMINISTIC LANGUAGE C EXTERNAL NAME 'CS!c_fromsql!udfsrc/c_fromsql.c!F!circle_t_FromSql'; CREATE FUNCTION circle_t_Ordering( p1 circle_t ) RETURNS FLOAT SPECIFIC circle_t_Ordering NO SQL PARAMETER STYLE SQL DETERMINISTIC LANGUAGE C EXTERNAL NAME 'CS!c_order!udfsrc/c_order.c!F!circle_t_Ordering';
以下の文は、circle_t_ToSql関数とcircle_t_FromSql関数を、circle_t UDT用の変換ルーチンとして登録します。
CREATE TRANSFORM FOR circle_t circle_t_IO (TO SQL WITH SPECIFIC FUNCTION circle_t_ToSql, FROM SQL WITH SPECIFIC FUNCTION circle_t_FromSql);
以下の文は、circle_t_Ordering関数を、circle_t UDT用の整列ルーチンとして登録します。
CREATE ORDERING FOR circle_t ORDER FULL BY MAP WITH SPECIFIC FUNCTION circle_t_Ordering;