我正试图从JSON文件中获取一些数据,并将这些数据以不同的格式存储在Oracle中。目前我有以下表格:
CREATE TABLE json_documents (
id RAW(16) NOT NULL,
data CLOB,
CONSTRAINT json_documents_pk PRIMARY KEY (id),
CONSTRAINT json_documents_json_chk CHECK (data IS JSON)
);
我插入了以下内容:
INSERT INTO json_documents (id, data)
VALUES (SYS_GUID(),
'[{
"rid7":"9R1CODE",
"rid":[
]
},
{
"rid7":"ZB0CODE",
"rid":[
{
"rid10":"WB10123124",
"rid17":"WB10123124ZB0CODE"
}
]
},
{
"rid7":"ZB1CODE",
"rid":[
{
"rid10":"ZKH9875435",
"rid17":"ZKH9875435ZB1CODE"
}
]
}]');
现在,如果我执行以下选择:
SELECT a.data.rid7
FROM JSON_DOCUMENTS a;
我得到以下结果:
[9R1CODE,ZB0CODE,ZB1CODE]
而我希望在一列中获得结果,但在不同的行中。有办法做到这一点吗?如何区分json_documents
表中同一行中的多个"rid7"?
此外,我如何访问JSON文件中的不同"rid10"?
我还尝试以以下方式使用json_value
:
SELECT JSON_VALUE(a.data, '$.rid7')
FROM JSON_DOCUMENTS a;
但是查询结果为空值。为什么?
您可以为此目的使用json_table。NESTED PATH参数起作用。
请根据你得到的结果核对我的答案。
select CONDITION from
json_table('{"test": ["9R1CODE","ZB0CODE","ZB1CODE"]}', '$'
columns (test varchar2(100) format json path '$',
nested path '$.test[*]'
columns ( condition varchar2(100) path '$')));
对于第二个问题,您可以使用
SELECT JSON_VALUE(a.data, '$.*.rid10')
FROM JSON_DOCUMENTS a;