データ型の定義¶
Virtual DataPort のカタログには、一連の定義済みデータ型が組み込まれています (「 データ型 」のセクションを参照)。すでに説明したように、組み込まれたデータ型は、次の 2 グループに分類されます。
基本型
複合型
Virtual DataPort では、 CREATE TYPE
ステートメントにより、新しい複合データ型を定義できます。このステートメントを使用すると、以下のデータ型を作成できます。
配列型
レジスター型
複合型の 配列
と レジスター
の処理方法の詳細については、「 複合値の管理 」のセクションで説明しています。
CREATE [ OR REPLACE ] TYPE <name:identifier> AS { <array> | <register>
}
<array> ::=
ARRAY OF <register>
<register> ::=
REGISTER OF ( <register element> [, <register element> ]* )
<register element> ::=
<name:identifier>:<type:identifier>
[ ( <property name> = <property value> ) ]
レジスターのフィールドの 型
が blob
であれば、 contenttype
プロパティを使用してそのフィールドのコンテンツタイプを表せます。このプロパティの値は、定数 (application/pdf
など)、または式になります。詳細については、管理ガイドの「 基本ビューの Blob フィールドの扱い 」のセクションを参照してください。
レジスター
型を新規作成するときは、その型に含まれるエレメントの名前とデータ型を指定する必要があります。「 Creating a register data type 」では、個人データを含む レジスター
データ型を作成しています。名前 (text
型の属性 NAME
)、姓 (text
型の属性 SURNAME
)、電話番号 (arrayPhone
型の属性 PHONE
)、給与 (decimal
型の属性 PAY
)、および誕生日 (date
型の属性 BIRTH
) といった個人データです。
CREATE TYPE registerPersonalData AS REGISTER OF (
NAME:text,
SURNAME:text,
PHONE:arrayPhone,
PAY:decimal,
BIRTH:date
);
配列
データ型を定義するときは、その配列データ型に含まれるエレメントの レジスター
型の名前を指定する必要があります。「 Creating a data type array and the register type it contains 」では、 arrayPhone
という 配列
データ型が作成されており、各電話番号を整数で表した電話番号のリストをカプセル化しています。 arrayPhone
の各要素は、 registerPhone
型のレジスターです。見てわかるとおり、 registerPhone
型は、 number
という int
型のエレメントをカプセル化しています。
CREATE TYPE registerPhone AS REGISTER OF (
NUMBER:int
);
CREATE TYPE arrayPhone AS ARRAY OF registerPhone;
OR REPLACE
修飾子を使用すると、指定した名前の型がある場合は、既存の型を新しい型で置き換えるよう指示することができます。新しい型が古い型と互換性がない場合は、古い型に依存しているビュー、あるいは古い型を使用して定義した他の型に依存しているビューは、誤りがあるものとしてマークされます。新しい型のフィールドが古い型のフィールドの「スーパーセット」である場合、それらの型は互換性があるものと見なされます。つまり、新しい型では、新しいフィールドを追加できますが、同じ名前と型の古いフィールドを維持する必要があります。