OceanBaseデータベースにおいて、XMLType型とVARCHARデータ型の間には、暗黙的な変換が存在します。
ただし、ユーザーがXMLTypeを文字列として直接使用することは推奨されません。OceanBaseデータベースは内部でXMLTypeデータをバイナリ形式で表現しており、この表現方法はXPathクエリを最適化すると同時に、ユーザー入力の元の形式情報(例えば、XML element の改行、インデント、XML規格に準拠した無視可能なスペースなど)を削除します。ユーザーがXMLTypeの出力形式を調整したい場合は、XMLSERIALIZE()関数を使用できます。
XMLTypeデータ型と他のデータ型との変換ルールは以下の表のとおりです。
| ソースタイプ | ターゲットタイプ | 暗黙変換 | 明示変換 |
|---|---|---|---|
| XMLType | VARCHAR2 | XMLTypeデータはVARCHAR2列に挿入でき、SUBSTR()などの関数を使用できます。 |
サポートされており、CAST(XMLType as VARCHAR2(n))またはXMLSERIALIZE()を使用できます。 |
| XMLType | CLOB | サポートされていません | サポートされていませんが、XMLSERIALIZE()関数を使用してCLOB型に変換できます。 |
| XMLType | BLOB | サポートされていません | サポートされていませんが、XMLSERIALIZE()関数を使用してBLOB型に変換できます。 |
| XMLType | その他の基本型 | サポートされていません | サポートされていませんが、XMLCAST()関数を使用してXMLドキュメント内のテキストを他の基本型に変換できます。 |
| VARCHAR2 | XMLType | VARCHAR2データはXMLType列に直接挿入できますが、XMLTypeを入力パラメータとする関数(例えばEXTRACTVALUE()など)は直接使用できません。 |
サポートされていません |
| CLOB | XMLType | サポートされていません | サポートされていません |
| BLOB | XMLType | サポートされていません | サポートされていません |
| その他の基本型 | XMLType | サポートされていません | サポートされていません |
XMLType型は、暗黙的または明示的にCAST関数を使用してVARCHAR、VARCHAR2、NVARCHAR2、およびCHARに変換できます。ただし、上記の型はCAST()関数を使用してXMLType型に変換することはできません。変換例は以下のとおりです:
# 明示的変換の例
SELECT CAST(XMLPARSE(DOCUMENT '<a>123</a>') AS VARCHAR(100)) FROM DUAL;
SELECT CAST(XMLPARSE(DOCUMENT '<a>123</a>') AS VARCHAR2(100)) FROM DUAL;
SELECT CAST(XMLPARSE(DOCUMENT '<a>123</a>') AS NVARCHAR(100)) FROM DUAL;
SELECT CAST(XMLPARSE(DOCUMENT '<a>123</a>') AS CHAR(100)) FROM DUAL;
SELECT CAST(XMLPARSE(DOCUMENT '<a>123</a>') AS VARCHAR2(2)) FROM DUAL;
# 暗黙的変換の例
SELECT UPPER(XMLPARSE(DOCUMENT'<a>123</a>')) FROM DUAL;
SELECT LOWER(XMLPARSE(DOCUMENT'<a>123</a>')) FROM DUAL;
SELECT SUBSTR(XMLPARSE(DOCUMENT'<a>123</a>')) FROM DUAL;
SELECT LENGTH(XMLPARSE(DOCUMENT'<a>123</a>')) FROM DUAL;
関連ドキュメント
XMLTypeデータ型の変換関数に関する詳細は、以下を参照してください: