OceanBaseデータベースでは、XMLTypeはBinary XML形式でのみ保存がサポートされています。
XMLType列には以下の制限があります:
- XMLType列は
PRIMARY KEY、FOREIGN KEY、およびUNIQUE KEYとして使用できず、パーティションキーとしても使用できません。 - XMLType列はキー列XMLインデックスをサポートしていません。XMLType列に基づく生成列インデックスを作成できますが、インデックスのタイプは基本データ型でなければならず、
LOB、JSON、GIS、またはXMLTypeデータ型はサポートされていません。
以下の例は、XMLType列を含むテーブルを作成する方法です。
obclient> CREATE TABLE xml_test(c1 XMLType);
Query OK, 0 rows affected
obclient> DESC xml_test;
+-------+---------+------+-----+---------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+-------+---------+------+-----+---------+-------+
| C1 | XMLTYPE | YES | NULL | NULL | NULL |
+-------+---------+------+-----+---------+-------+
1 row in set
さらに、OceanBaseデータベースはXMLType型に対して以下のDDL操作をサポートしています:
- XMLType列の追加と削除。
- XMLType列に生成列インデックスの作成。
XMLType列に基づくALTER TABLE関連操作の例を以下に示します。デフォルト値を設定する場合、結果型がXMLTypeまたはVARCHAR2型の式またはリテラルを使用する必要があります。
obclient> CREATE TABLE alter_test(c1 NUMBER);
Query OK, 0 rows affected
obclient> ALTER TABLE alter_test ADD (c2 XMLType);
Query OK, 0 rows affected
obclient> ALTER TABLE alter_test MODIFY c2 NOT NULL;
Query OK, 0 rows affected
# XMLType式をデフォルト値として使用する
obclient> ALTER TABLE alter_test MODIFY c2 DEFAULT '<a>abc</a>';
Query OK, 0 rows affected
obclient> ALTER TABLE alter_test DROP COLUMN c2;
Query OK, 0 rows affected
XMLType列に基づいて制約条件を定義する例を以下に示します。
obclient> CREATE TABLE xml_test01(c1 XMLType, c2 NUMBER, c3 XMLType NOT NULL);
Query OK, 0 rows affected
obclient> ALTER TABLE xml_test01 ADD CONSTRAINT cst CHECK(c1 IS NOT NULL) ENABLE VALIDATE;
Query OK, 0 rows affected
XMLType列に基づいて生成列を定義する例を以下に示します。
obclient> CREATE TABLE xml_test02(c1 NUMBER, c2 XMLType,c3 NUMBER GENERATED ALWAYS AS(LENGTH(c2)));
Query OK, 0 rows affected
XMLType列を含むテーブルに基づいて新しいテーブルを作成する例を以下に示します。
obclient> CREATE TABLE xml_test03(c1 NUMBER, c2 XMLType);
Query OK, 0 rows affected
obclient> INSERT INTO xml_test03 VALUES(11, '<a>abc</a>');
Query OK, 1 row affected
obclient> CREATE TABLE ctas1 AS SELECT * FROM xml_test03;
Query OK, 0 rows affected