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_exprurčuje pár klíč–hodnota vlastnosti.FORMAT JSONoznačuje, že vstupní řetězec je JSON, a proto nebude na výstupu uveden v uvozovkách.JSON_on_null_clauseurčuje chování, které se má použít, kdyžexprrovná se null (tj. buď zahrnout hodnoty null do výstupu, nebo ne).JSON_returning_clauseurčuje typ návratové hodnoty.STRICTzkontroluje, zda výstup funkce generování JSON je správný JSON. Pokud kontrola selže, dojde k chybě syntaxe.WITH UNIQUE KEYSzaruč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.