Oracle JSON_ARRAYAGG() 函数使用指南
Oracle JSON_ARRAYAGG()
是一个内置的聚合函数,它以 SQL 表达式列作为输入,将每个表达式转换为一个 JSON 值,并返回包含这些 JSON 值的单个 JSON 数组。
Oracle JSON_ARRAYAGG()
语法
这里是 Oracle JSON_ARRAYAGG()
函数的语法:
JSON_ARRAYAGG
( expr [ FORMAT JSON ] [ order_by_clause ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ]
)
参数
expr
-
必需的。 您可以指定任何求值为 JSON 对象、JSON 数组、数字文字、文本文字或 null 的 SQL 表达式。该函数将数字文字转换为 JSON 数值,将文本文字转换为 JSON 字符串值。
FORMAT JSON
-
可选的。使用此可选子句指示输入字符串为 JSON,并因此不会在输出中引用。
order_by_clause
-
可选的。该子句允许您在语句返回的 JSON 数组中对 JSON 值进行排序。
JSON_on_null_clause
-
可选的。您可以使用此子句指定
expr
评估为 null 时此函数的行为。NULL ON NULL
- 如果指定了此子句,则函数返回 JSON null 值。ABSENT ON NULL
- 如果指定了此子句,则函数从 JSON 数组中省略该值。这是默认设置。
JSON_agg_returning_clause
-
可选的。使用此子句指定该函数返回的字符串的数据类型。您可以指定以下数据类型:
VARCHAR2[(size [BYTE,CHAR])]
: 在 SQL 的其他地方指定VARCHAR2
数据类型时,必须指定大小。但是,在此子句中,您可以省略大小。CLOB
如果省略此子句,或者指定了
VARCHAR2
但省略了size
值,则JSON_ARRAYAGG
返回类型为VARCHAR2(4000)
的字符串。 STRICT
-
可选的。指定
STRICT
子句以验证 JSON 生成函数的输出是否为正确的 JSON。如果检查失败,则会引发语法错误。
返回值
Oracle JSON_ARRAYAGG()
函数返回一个 JSON 数组,它包括根据给定的表达式的所有的计算结果。
Oracle JSON_ARRAYAGG()
示例
这个示例使用以下语句模拟一个数据表:
SELECT 'Tim' name, 'Football' hobby FROM DUAL
UNION ALL
SELECT 'Tim', 'Basketball' FROM DUAL
UNION ALL
SELECT 'Lucy', 'Piano' FROM DUAL
UNION ALL
SELECT 'Lucy', 'Violin' FROM DUAL;
输出:
NAME HOBBY
_______ _____________
Tim Football
Tim Basketball
Lucy Piano
Lucy Violin
如果您需要从上面的数据集获取所有的爱好信息,请使用下面的语句:
SELECT JSON_ARRAYAGG(hobby)
FROM (
SELECT 'Tim' name, 'Football' hobby FROM DUAL
UNION ALL
SELECT 'Tim', 'Basketball' FROM DUAL
UNION ALL
SELECT 'Lucy', 'Piano' FROM DUAL
UNION ALL
SELECT 'Lucy', 'Violin' FROM DUAL
);
输出:
JSON_ARRAYAGG(HOBBY)
_____________________________________________
["Football","Basketball","Piano","Violin"]
如果您需要从上面的数据集获取每个人的爱好信息,请使用下面的带有 GROUP BY
子句的语句:
SELECT name, JSON_ARRAYAGG(hobby) hobbies
FROM (
SELECT 'Tim' name, 'Football' hobby FROM DUAL
UNION ALL
SELECT 'Tim', 'Basketball' FROM DUAL
UNION ALL
SELECT 'Lucy', 'Piano' FROM DUAL
UNION ALL
SELECT 'Lucy', 'Violin' FROM DUAL
)
GROUP BY name;
输出:
NAME HOBBIES
_______ ____________________________
Lucy ["Piano","Violin"]
Tim ["Football","Basketball"]
当然,您也可以将所有的爱好按照升序排序:
SELECT name, JSON_ARRAYAGG(hobby ORDER BY hobby) hobbies
FROM (
SELECT 'Tim' name, 'Football' hobby FROM DUAL
UNION ALL
SELECT 'Tim', 'Basketball' FROM DUAL
UNION ALL
SELECT 'Lucy', 'Piano' FROM DUAL
UNION ALL
SELECT 'Lucy', 'Violin' FROM DUAL
)
GROUP BY name;
输出:
NAME HOBBIES
_______ ____________________________
Lucy ["Piano","Violin"]
Tim ["Basketball","Football"]
结论
Oracle JSON_ARRAYAGG()
是一个内置的聚合函数,它以 SQL 表达式列作为输入,将每个表达式转换为一个 JSON 值,并返回包含这些 JSON 值的单个 JSON 数组。