V databázi Oracle je to JSON_OBJECTAGG()
funkce vytvoří objekt JSON z páru klíč–hodnota.
Klíč vlastnosti, hodnota vlastnosti nebo obojí jsou obvykle sloupce výrazů SQL.
Syntaxe
Syntaxe vypadá takto:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
Kde:
[ KEY ] key_expr VALUE val_expr
určuje pár klíč–hodnota vlastnosti.FORMAT JSON
označuje, že vstupní řetězec je JSON, a proto nebude na výstupu uveden v uvozovkách.JSON_on_null_clause
určuje chování, které se má použít, kdyžexpr
rovná se null (tj. buď zahrnout hodnoty null do výstupu, nebo ne).JSON_returning_clause
určuje typ návratové hodnoty.STRICT
zkontroluje, zda výstup funkce generování JSON je správný JSON. Pokud kontrola selže, dojde k chybě syntaxe.WITH UNIQUE KEYS
zaručuje, že generované objekty JSON mají jedinečné klíče.
Příklad
Zde je příklad demonstrující, jak to funguje:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Výsledek:
{"skóre":37}
KEY
část je volitelná, takže následující dosáhne stejného výsledku:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Výsledek:
{"skóre":37}
Vnořený JSON
Pokud jedna z předávaných hodnot obsahuje JSON, můžete použít FORMAT JSON
argument k určení, že obsahuje JSON a neměl by být ve výstupu citován.
Příklad:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Výsledek:
{"details":{"name":"Petr", "skóre":64}}
Co se stane, když odstraníme FORMAT JSON
část:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Výsledek:
{"detaily":"{\"jméno\":\"Petr\", \"skóre\":64}"}
Příklad databáze
JSON_OBJECTAGG()
Funkce se obvykle používá k vytváření dokumentů JSON na základě hodnot ve sloupci databáze.
Předpokládejme, že spustíme následující dotaz:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Výsledek:
Zde je příklad, jak můžeme použít JSON_OBJECTAGG()
funkce k vytvoření dokumentu JSON ze dvou výše uvedených sloupců:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Výsledek:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
V tomto případě job_id
sloupec je klíč a min_salary
sloupec je hodnota.
Podrobnější vysvětlení této funkce najdete v dokumentaci Oracle.