首批通过分布式安全可靠测评,为关键业务系统打造
JSON_OBJECTAGG
更新时间:2026-03-23 15:34:02
描述
JSON_OBJECTAGG() 函数将输入参数作为 key-value 对, 其中的 key 和 value 都是列表达式,将所有的 key-value 对组合到一个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将 JSONNULL值用作当前数组元素。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