文字列型(例:VARCHAR2、CLOB)を明示的にJSON型に変換する場合は、CAST 式を使用できます。例:
obclient> SELECT CAST('{"a":1}' AS JSON) FROM DUAL;
+-----------------------+
| CAST('{"A":1}'ASJSON) |
+-----------------------+
| {"a":1} |
+-----------------------+
1 row in set
obclient> SELECT CAST('{}' AS JSON) FROM DUAL;
+------------------+
| CAST('{}'ASJSON) |
+------------------+
| {} |
+------------------+
1 row in set
obclient> SELECT CAST('[1, 2, 3]' AS JSON) FROM DUAL;
+-----------------------+
| CAST('[1,2,3]'ASJSON) |
+-----------------------+
| [1,2,3] |
+-----------------------+
1 row in set
文字列型をJSON文字列として使用する場合は、TREAT 式を使用できますが、この式はJSON構文を検証せず、戻り値も文字列であってJSON型ではありません。そのため、JSON機能を十分に活用できないため、使用は推奨されず、Oracleの過去の動作との互換性のためにのみ使用されます。例:
obclient> SELECT TREAT('{"a":1}' AS JSON) FROM DUAL;
+------------------------+
| TREAT('{"A":1}'ASJSON) |
+------------------------+
| {"a": 1} |
+------------------------+
1 row in set
obclient> SELECT TREAT('{}' AS JSON) FROM DUAL;
+-------------------+
| TREAT('{}'ASJSON) |
+-------------------+
| {} |
+-------------------+
1 row in set
暗黙的変換ルール
JSON型と VARCHAR2、CLOB、BLOB 型の間には暗黙的な変換が存在します。VARCHAR2、CLOB、BLOB で表現されるJSONは、Textual JSONまたはSerialized JSON、すなわちJSONテキストと呼ばれます。ただし、BLOB を使用してJSONを格納しても、それがJSON Binaryを格納していることを意味するわけではない点に注意してください。
VARCHAR2、CLOB、BLOB型をJSON列に書き込むと、暗黙的にJSON型に変換されます。- JSON型を
VARCHAR2、CLOB、BLOB列に書き込むと、暗黙的に対応するデータ型に変換され、OSONからTextual JSONへと変換されます。
その他の型は、JSON型に暗黙的に変換されません。
明示的変換ルール
- テキスト型は、JSONコンストラクタを使用してJSON型に変換できます。
- JSONは
JSON_VALUE関数を使用して戻り値の型を指定するか、dot notation.item_method()を使用して他の型に変換できます。