説明
JSON_OBJECTAGG()関数は、入力パラメータをkey-valueペアとして扱い、そのkeyとvalueはどちらもリスト式であり、すべてのkey-valueペアを1つのJSONオブジェクトにまとめて返します。
構文
JSON_OBJECTAGG([KEY] key_expr [VALUE] value_expr
[ABSENT|NULL ON NULL,]
[RETURNING CLOB|BLOB|JSON|VARCHAR2|VARCHAR2[size],]
[STRICT,]
[WITH UNIQUE KEYS]);
構文の説明
JSON_OBJECT()関数の構文は以下の通りです:
WITH UNIQUE KEYS:返される結果に重複するKeyを含めないように制限します。NULL|ABSENT ON NULL:パラメータ式の計算結果がNULLの場合にのみ有効になります。NULL ON NULLは、JSONのNULL値を現在の配列要素として扱います。ABSENT ON NULLは、その配列要素を無視します。
STRICT:出力結果が合法的なJSON形式のデータであることを検証します。RETURNING CLOB|BLOB|JSON|VARCHAR2|VARCHAR2[size]:返す値の型を指定します。ここでVARCHAR2[size]は返す値の長さを制限できます。
例
# デフォルトパラメータを使用する
CREATE TABLE t (a int, k VARCHAR(10), v VARCHAR(10));
INSERT INTO t VALUES (1, 'key1', '"alfa"');
INSERT INTO t VALUES (1, 'key3', 'null');
INSERT INTO t VALUES (1, 'key4', 'false');
INSERT INTO t VALUES (2, 'key6', '124');
obclient> SELECT a, JSON_OBJECTAGG(k VALUE v) FROM t GROUP BY a;
+------+--------------------------------------------------+
| A | JSON_OBJECTAGG(KVALUEV) |
+------+--------------------------------------------------+
| 1 | {"key1":"\"alfa\"","key3":"null","key4":"false"} |
| 2 | {"key6":"124"} |
+------+--------------------------------------------------+
# FORMAT JSON句を使用する
obclient> SELECT a, JSON_OBJECTAGG(k VALUE v FORMAT JSON) FROM t GROUP BY a;
+------+------------------------------------------+
| A | JSON_OBJECTAGG(KVALUEVFORMATJSON) |
+------+------------------------------------------+
| 1 | {"key1":"alfa","key3":null,"key4":false} |
| 2 | {"key6":124} |
+------+------------------------------------------+
# NULL|ABSENT ON NULL句を使用する
obclient> INSERT INTO t VALUES (2, 'key7', null);
obclient> SELECT a, JSON_OBJECTAGG(k VALUE v NULL ON NULL) FROM t GROUP BY a;
+------+--------------------------------------------------+
| A | JSON_OBJECTAGG(KVALUEVNULLONNULL) |
+------+--------------------------------------------------+
| 1 | {"key1":"\"alfa\"","key3":"null","key4":"false"} |
| 2 | {"key6":"124","key7":"null"} |
+------+--------------------------------------------------+
obclient> SELECT a, JSON_OBJECTAGG(k VALUE v ABSENT ON NULL) FROM t GROUP BY a;
+------+--------------------------------------------------+
| A | JSON_OBJECTAGG(KVALUEVABSENTONNULL) |
+------+--------------------------------------------------+
| 1 | {"key1":"\"alfa\"","key3":"null","key4":"false"} |
| 2 | {"key6":"124"} |
+------+--------------------------------------------------+
# RETURNING句を使用する
obclient> SELECT a, JSON_OBJECTAGG(k VALUE v returning varchar2) FROM t GROUP BY a;
+------+--------------------------------------------------+
| A | JSON_OBJECTAGG(KVALUEVRETURNINGVARCHAR2) |
+------+--------------------------------------------------+
| 1 | {"key1":"\"alfa\"","key3":"null","key4":"false"} |
| 2 | {"key6":"124"} |
+------+--------------------------------------------------+
2 rows in set