我使用此代码将 JSON 数据记录到 Oracle 数据库。
SELECT NOM, PRENOMS, DATE_NAISS
FROM JSON_TABLE('[
{
"Id": 123,
"Nom": "Toto",
"Prenoms": [
"Pascal",
"Vincent"
],
"DateNaissance": "1983-01-01T00:00:00"
}]', '$[*]' COLUMNS
(
"NOM" PATH '$.Nom',
"PRENOMS" PATH '$.Prenoms',
"DATE_NAISS" DATE PATH '$.DateNaissance'
) ) T_JSON;
我想像这样连接字段“Prenoms”的元素
[ {
"Id": 123,
"Nom": "Toto",
"Prenoms": "Pascal, Vincent",
"DateNaissance": "1983-01-01T00:00:00",
} ]
你能帮我一下吗?
谢谢
这是我尝试过的代码,但不行,它返回一个空字符串:
"PRENOMS" varchar2(100) FORMAT JSON PATH '$."Prenoms"[*]'
将
prenoms
数组提取为数组,然后将其单独拆分,然后聚合成您想要的格式:
SELECT NOM,
( SELECT LISTAGG(prenom, ', ')
FROM JSON_TABLE(
PRENOMS,
'$[*]'
COLUMNS (prenom VARCHAR2(200) PATH '$')
)
) AS prenoms,
DATE_NAISS
FROM JSON_TABLE('[
{
"Id": 123,
"Nom": "Toto",
"Prenoms": [ "Pascal", "Vincent" ],
"DateNaissance": "1983-01-01T00:00:00"
}
]',
'$[*]'
COLUMNS (
"NOM" VARCHAR2(200) PATH '$.Nom',
"PRENOMS" CLOB FORMAT JSON PATH '$.Prenoms',
"DATE_NAISS" DATE PATH '$.DateNaissance'
)
);
哪个输出:
诺姆 | 预提名 | 日期_NAISS |
---|---|---|
托托 | 文森特·帕斯卡 | 1983-01-01 00:00:00 |
如果您希望以 JSON 格式返回:
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
KEY 'Id' VALUE ID,
KEY 'Nom' VALUE NOM,
KEY 'Prenoms' VALUE (
SELECT LISTAGG(prenom, ', ')
FROM JSON_TABLE(
PRENOMS,
'$[*]'
COLUMNS (prenom VARCHAR2(200) PATH '$')
)
),
KEY 'DateNaissance' VALUE DATE_NAISS
)
) AS json
FROM JSON_TABLE('[
{
"Id": 123,
"Nom": "Toto",
"Prenoms": [ "Pascal", "Vincent" ],
"DateNaissance": "1983-01-01T00:00:00"
}
]',
'$[*]'
COLUMNS (
ID NUMBER PATH '$.Id',
NOM VARCHAR2(200) PATH '$.Nom',
PRENOMS CLOB FORMAT JSON PATH '$.Prenoms',
DATE_NAISS DATE PATH '$.DateNaissance'
)
);
哪个输出:
JSON |
---|
[{"Id":123,"Nom":"托托","Prenoms":"帕斯卡,文森特","DateNaissance":"1983-01-01T00:00:00"}] |
您也可以使用嵌套路径来完成:
'$[*]' COLUMNS
(
id PATH '$.Id',
NOM PATH '$.Nom',
DATE_NAISS DATE PATH '$.DateNaissance',
nested path '$.Prenoms[*]'
columns (
ord for ordinality,
PRENOM PATH '$'
)
)
然后
listagg(PRENOM, ', ') within group(order by ord) as prenoms