W bazie danych Oracle JSON_OBJECTAGG()
funkcja tworzy obiekt JSON z pary klucz-wartość.
Zazwyczaj klucz właściwości, wartość właściwości lub obie są kolumnami wyrażeń SQL.
Składnia
Składnia wygląda tak:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
Gdzie:
[ KEY ] key_expr VALUE val_expr
określa parę klucz-wartość właściwości.FORMAT JSON
wskazuje, że ciąg wejściowy to JSON i dlatego nie będzie cytowany w danych wyjściowych.JSON_on_null_clause
określa zachowanie do użycia, gdyexpr
równa się null (tzn. albo dołącz wartości null do danych wyjściowych, albo nie).JSON_returning_clause
określa typ zwracanej wartości.STRICT
sprawdza, czy dane wyjściowe funkcji generowania JSON są poprawne w formacie JSON. Jeśli sprawdzenie się nie powiedzie, zgłaszany jest błąd składni.WITH UNIQUE KEYS
gwarantuje, że wygenerowane obiekty JSON mają unikalne klucze.
Przykład
Oto przykład pokazujący, jak to działa:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Wynik:
{"score":37}
KEY
część jest opcjonalna, więc następujące daje ten sam wynik:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Wynik:
{"score":37}
Zagnieżdżony JSON
Jeśli jedna z przekazywanych wartości zawiera JSON, możesz użyć FORMAT JSON
argument, aby określić, że zawiera JSON i nie powinien być cytowany w danych wyjściowych.
Przykład:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Wynik:
{"details":{"name": "Peter", "score": 64}}
Oto, co się stanie, jeśli usuniemy FORMAT JSON
część:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Wynik:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Przykład bazy danych
JSON_OBJECTAGG()
funkcja jest zwykle używana do tworzenia dokumentów JSON na podstawie wartości w kolumnie bazy danych.
Załóżmy, że uruchamiamy następujące zapytanie:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Wynik:
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY __________ ________________________________ _____________ _____________ AD_PRES President 20000 40000 AD_VP Administration Vice President 15000 30000 SA_MAN Sales Manager 10000 20000
Oto przykład, jak możemy użyć JSON_OBJECTAGG()
funkcja do utworzenia dokumentu JSON z dwóch z powyższych kolumn:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Wynik:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
W tym przypadku job_id
kolumna jest kluczem, a min_salary
kolumna jest wartością.
Zobacz dokumentację Oracle, aby uzyskać bardziej szczegółowe wyjaśnienie tej funkcji.