UDTはユーザー定義型の略であり、ビジネス構造に合わせて適切なカスタム型を作成できます。以前はPL内でのみ使用が可能でしたが、OceanBaseデータベースV4.4.2 BP2バージョンからテーブル列型としての使用がサポートされるようになりました。これにより、より柔軟なテーブルデータモデルの構築が可能になります。
現在、以下の2種類のUDTがテーブル列としてサポートされています(複雑なネスト型をサポート)。
- OBJECT
- VARRAY
構文サポート
現在、以下の構文機能をサポートしています:
createでUDT列型を含むテーブルを作成することをサポートします。alter table add column/drop column/modify columnでUDT列の追加、削除、変更をサポートします。insertでUDT列データを挿入することをサポートします。updateでUDT列配列を更新することをサポートします。- UDT列データへのアクセスをサポートします。
- UDT列の属性またはメンバー関数へのアクセスをサポートします。
table functionでvarray型のUDT列を使用することをサポートします。
使用例
オブジェクト型の作成
CREATE TYPE type_obj1 AS OBJECT ( a int, b int ); CREATE TYPE type_array AS VARRAY(10) of int;UDT列を含むテーブルの作成
CREATE TABLE t_udt (c1 int, c2 type_obj1, c3 type_array);データの挿入
INSERT INTO T_UDT VALUES(1, TYPE_OBJ1(1,2), TYPE_ARRAY(1,2,3));データの更新
UPDATE T_UDT SET C2 = TYPE_OBJ1(11,22);UDT列のクエリ
SELECT C1, C2, C3 FROM T_UDT;UDT列のプロパティを照会する
SELECT T.C2.A, T.C2.B FROM T_UDT T;table functionを使用してvarray型UDT列にアクセスするSELECT tf.* from T_UDT, table(T_UDT.c3) tf;
機能制限
- テーブル列に依存するUDTは、
alter typeでプロパティを変更できません。 - テーブルに依存するUDTは、
drop forceをサポートしていません。 - 制約や
order byではobject.addrの構文はサポートされていません。 - updateではプロパティの更新をサポートしていません。
- 現在のOceanBaseバージョンでは、UDT COLUMNに書き込まれた値は、CDCによってオンラインスキーマモードで処理される必要があります。