CREATE DISTINCT TYPE ステートメントは、特殊 (distinct) タイプを定義します。 特殊タイプは、常に組み込みデータ・タイプのいずれかに基づいています。 このステートメントの正常な実行により、 該当の特殊タイプとそのソース・タイプとの間をキャストする関数も生成され、 また必要に応じてその特殊タイプで使用する比較演算子 (=、<>、<、<=、>、 および >=) に対するサポートが生成されます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むか、 または動的 SQL ステートメントを使用して発行することができます。 このステートメントは、動的に準備可能な実行可能ステートメントです。 しかし、バインド・オプション DYNAMICRULES BIND を適用する場合、 ステートメントを動的に準備することはできません (SQLSTATE 42509)。
許可
このステートメントの許可 ID には、以下の特権が少なくとも 1 つ含まれている必要があります。
構文
>>-CREATE DISTINCT TYPE--distinct-type-name--AS-----------------> (1) >-----| source-data-type |--WITH COMPARISONS------------------>< source-data-type |---+-SMALLINT-------------------------------------------------+-> +-+-INTEGER-+----------------------------------------------+ | '-INT-----' | +-BIGINT---------------------------------------------------+ +-+-FLOAT--+----------------+-+----------------------------+ | | '-(--integer--)--' | | | +-REAL----------------------+ | | | .-PRECISION-. | | | '-DOUBLE-+-----------+------' | +--+-DECIMAL-+---+--------------------------------+--------+ | +-DEC-----+ '-(--integer--+-----------+---)--' | | +-NUMERIC-+ '-,integer--' | | '-NUM-----' | +--+--+-CHARACTER-+---+------------+-+---+--------------+--+ | | '-CHAR------' '-(integer)--' | '-FOR BIT DATA-' | | +-VARCHAR(integer)----------------+ | | '-LONG VARCHAR--------------------' | +-GRAPHIC--+------------+----------------------------------+ | '-(integer)--' | +-VARGRAPHIC(integer)--------------------------------------+ +-LONG VARGRAPHIC------------------------------------------+ +-DATE-----------------------------------------------------+ +-TIME-----------------------------------------------------+ +-TIMESTAMP------------------------------------------------+ +--+-BLOB---+--(--integer--+---+---)-----------------------+ | +-CLOB---+ +-K-+ | | '-DBCLOB-' +-M-+ | | '-G-' | '-DATALINK--+------------+---------------------------------' '-(integer)--' >---------------------------------------------------------------|
注:
説明
動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターは、 修飾子のないオブジェクト名の修飾子として使用されます。 静的 SQL ステートメントでは、 QUALIFIER プリコンパイル / バインド・オプションにより、 修飾子のないオブジェクト名の修飾子が暗黙指定されます。 修飾形式は、schema-name の後にピリオドと SQL 識別子が続きます。
スキーマ名 (明示指定または暗黙指定) は、8 バイト以下でなければなりません (SQLSTATE 42622)。
述部でキーワードとして使用されるいくつかの名前は、システム使用として予約されており、 distinct-type-name として使用することはできません。 それに含まれる名前は、 SOME、 ANY、 ALL、 NOT、 AND、 OR、 BETWEEN、 NULL、 LIKE、 EXISTS、 IN、 UNIQUE、 OVERLAPS、 SIMILAR、 MATCH、 および 基本述部に記載されている比較演算子です。 この規則に違反すると、エラーになります (SQLSTATE 42939)。
2 つの部分からなる distinct-type-name を指定する場合、 スキーマ名を "SYS" で始めることはできません。 違反すると、エラー (SQLSTATE 42939) になります。
注
一般に、これらの関数の形式は次のようになります。
CREATE FUNCTION source-type-name (distinct-type-name) RETURNS source-type-name ... CREATE FUNCTION distinct-type-name (source-type-name) RETURNS distinct-type-name ...
ソース・タイプがパラメーター化タイプである場合、 特殊タイプをソース・タイプに変換する関数の関数名は、 パラメーターなしのソース・タイプの名前になります (詳細については、表 20 を参照)。 この関数の戻り値のタイプには、 CREATE DISTINCT TYPE ステートメントに指定されたパラメーターが含められます。 ソース・タイプを特殊タイプに変換するための関数の入力パラメーターは、 そのパラメーターを含むソース・タイプになります。 たとえば、
CREATE DISTINCT TYPE T_SHOESIZE AS CHAR(2) WITH COMPARISONS CREATE DISTINCT TYPE T_MILES AS DOUBLE WITH COMPARISONS
上記の指定により、次の関数が生成されます。
FUNCTION CHAR (T_SHOESIZE) RETURNS CHAR (2) FUNCTION T_SHOESIZE (CHAR (2)) RETURNS T_SHOESIZE FUNCTION DOUBLE (T_MILES) RETURNS DOUBLE FUNCTION T_MILES (DOUBLE) RETURNS T_MILES
生成された cast 関数のスキーマは、特殊タイプのスキーマと同じです。 この名前と同じ名前でシグニチャーも同じ他の関数が、 データベースにすでに存在していてはなりません (SQLSTATE 42710)。
次の表は、事前定義されているすべてのデータ・タイプについて、
特殊タイプをソース・タイプに変換する関数、
およびソース・タイプを特殊タイプに変換する関数の名前を示しています。
ソース・タイプ名 | 関数名 | パラメーター | 戻りタイプ | ||
---|---|---|---|---|---|
CHAR | <特殊> | CHAR (n) | <特殊> | ||
CHAR | <特殊> | CHAR (n) | |||
<特殊> | VARCHAR (n) | <特殊> | |||
VARCHAR | <特殊> | VARCHAR (n) | <特殊> | ||
VARCHAR | <特殊> | VARCHAR (n) | |||
LONG VARCHAR | <特殊> | LONG VARCHAR | <特殊> | ||
LONG_VARCHAR | <特殊> | LONG VARCHAR | |||
CLOB | <特殊> | CLOB (n) | <特殊> | ||
CLOB | <特殊> | CLOB (n) | |||
BLOB | <特殊> | BLOB (n) | <特殊> | ||
BLOB | <特殊> | BLOB (n) | |||
GRAPHIC | <特殊> | GRAPHIC (n) | <特殊> | ||
GRAPHIC | <特殊> | GRAPHIC (n) | |||
<特殊> | VARGRAPHIC (n) | <特殊> | |||
VARGRAPHIC | <特殊> | VARGRAPHIC (n) | <特殊> | ||
VARGRAPHIC | <特殊> | VARGRAPHIC (n) | |||
LONG VARGRAPHIC | <特殊> | LONG VARGRAPHIC | <特殊> | ||
LONG_VARGRAPHIC | <特殊> | LONG VARGRAPHIC | |||
DBCLOB | <特殊> | DBCLOB (n) | <特殊> | ||
DBCLOB | <特殊> | DBCLOB (n) | |||
SMALLINT | <特殊> | SMALLINT | <特殊> | ||
<特殊> | INTEGER | <特殊> | |||
SMALLINT | <特殊> | SMALLINT | |||
INTEGER | <特殊> | INTEGER | <特殊> | ||
INTEGER | <特殊> | INTEGER | |||
BIGINT | <特殊> | BIGINT | <特殊> | ||
BIGINT | <特殊> | BIGINT | |||
DECIMAL | <特殊> | DECIMAL (p,s) | <特殊> | ||
DECIMAL | <特殊> | DECIMAL (p,s) | |||
NUMERIC | <特殊> | DECIMAL (p,s) | <特殊> | ||
DECIMAL | <特殊> | DECIMAL (p,s) | |||
REAL | <特殊> | REAL | <特殊> | ||
<特殊> | DOUBLE | <特殊> | |||
REAL | <特殊> | REAL | |||
FLOAT(n) ただし n<=24 | <特殊> | REAL | <特殊> | ||
<特殊> | DOUBLE | <特殊> | |||
REAL | <特殊> | REAL | |||
FLOAT(n) ただし n>24 | <特殊> | DOUBLE | <特殊> | ||
DOUBLE | <特殊> | DOUBLE | |||
FLOAT | <特殊> | DOUBLE | <特殊> | ||
DOUBLE | <特殊> | DOUBLE | |||
DOUBLE | <特殊> | DOUBLE | <特殊> | ||
DOUBLE | <特殊> | DOUBLE | |||
DOUBLE PRECISION | <特殊> | DOUBLE | <特殊> | ||
DOUBLE | <特殊> | DOUBLE | |||
DATE | <特殊> | DATE | <特殊> | ||
DATE | <特殊> | DATE | |||
TIME | <特殊> | TIME | <特殊> | ||
TIME | <特殊> | TIME | |||
TIMESTAMP | <特殊> | TIMESTAMP | <特殊> | ||
TIMESTAMP | <特殊> | TIMESTAMP | |||
DATALINK | <特殊> | DATALINK | <特殊> | ||
DATALINK | <特殊> | DATALINK | |||
|
上記の表には、特殊タイプが定義されている場合に自動的に生成される関数だけを示しています。 したがって、組み込み関数 (AVG、MAX、LENGTH、など) は、 CREATE FUNCTION ステートメント (CREATE FUNCTIONを参照) を使用して、 特殊タイプに対応するユーザー定義関数 (適切な組み込み関数に基づく) を登録してからでないと、 サポートされません。 特に、組み込み列関数に基づくユーザー定義関数を登録することが可能である点に注意してください。
WITH COMPARISONS 文節を使用して特殊タイプが作成された場合、 システム生成の比較演算子が作成されます。 それらの比較演算子の作成により、 SYSCAT.FUNCTIONS カタログ視点に新しい関数としての項目が生成されます。
それらの演算子や cast 関数を SQL ステートメントで正しく使用するには、 SQL パスに特殊タイプのスキーマ名が含まれていなければなりません (SET PATH、 またはアプリケーション開発の手引き で説明されている FUNCPATH BIND オプションを参照してください)。
例
例 1: INTEGER データ・タイプに基づく、SHOESIZE という名前の特殊タイプを作成します。
CREATE DISTINCT TYPE SHOESIZE AS INTEGER WITH COMPARISONS
またこの結果、比較演算子 (=、<>、<、<=、>、>=)、 INTEGER を戻す cast 関数 INTEGER(SHOESIZE)、 および SHOESIZE を戻す cast 関数 SHOESIZE(INTEGER) が作成されます。
例 2: DOUBLE データ・タイプに基づく、MILES という名前の特殊タイプを作成します。
CREATE DISTINCT TYPE MILES AS DOUBLE WITH COMPARISONS
またこの結果、比較演算子 (=、<>、<、=、>、>=)、 DOUBLE を戻す cast 関数 DOUBLE(MILES)、 および MILES を戻す cast 関数 MILES(DOUBLE) が作成されます。