By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE myjson( doc VARCHAR2(4000) check (doc is JSON) );
INSERT INTO myjson VALUES('{
"totalResultsCount": 19,
"geonames": [
{
"geonameId": 2593109,
"fcode": "ADM1"
},
{
"geonameId": 3336899,
"fcode": "ADM1"
}]
}
');
1 rows affected
SELECT ROW_NUMBER() OVER (ORDER BY 1) - 1 AS row_id, js.product
FROM myjson
CROSS JOIN JSON_TABLE(
doc, '$.geonames[*]' COLUMNS (
product VARCHAR(100) PATH '$.geonameId',
fcode VARCHAR(100) PATH '$.fcode'
)
) js
WHERE js.fcode = 'ADM1'
ROW_ID | PRODUCT |
---|---|
0 | 2593109 |
1 | 3336899 |
DECLARE
json_array_t OWA.VC_ARR;
BEGIN
FOR c IN
(
SELECT ROW_NUMBER() OVER (ORDER BY 1) - 1 AS row_id, js.product
FROM myjson
CROSS JOIN JSON_TABLE(
doc, '$.geonames[*]' COLUMNS (
product VARCHAR(100) PATH '$.geonameId',
fcode VARCHAR(100) PATH '$.fcode'
)
) js
WHERE js.fcode = 'ADM1' )
LOOP
json_array_t(c.row_id) := c.product;
DBMS_OUTPUT.PUT_LINE( 'value for json_array_t('||c.row_id||') is '||json_array_t(c.row_id) );
END LOOP;
END;
/
1 rows affected
dbms_output:
value for json_array_t(0) is 2593109
value for json_array_t(1) is 3336899