sql >> Databasteknik >  >> RDS >> Oracle

JSON_OBJECTAGG() Funktion i Oracle

I Oracle Database, JSON_OBJECTAGG() funktionen skapar ett JSON-objekt från ett nyckel-värdepar.

Vanligtvis är egenskapsnyckeln, egenskapsvärdet eller båda kolumner med SQL-uttryck.

Syntax

Syntaxen ser ut så här:

JSON_OBJECTAGG
  ( [ KEY ] string VALUE expr [ FORMAT JSON ]
    [ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
    [ STRICT ] [ WITH UNIQUE KEYS ]
  )

Var:

  • [ KEY ] key_expr VALUE val_expr anger ett egenskapsnyckel-värdepar.
  • FORMAT JSON indikerar att indatasträngen är JSON och kommer därför inte att citeras i utdata.
  • JSON_on_null_clause anger beteendet som ska användas när expr är lika med null (dvs. inkluderar antingen nollvärden i utdata eller inte).
  • JSON_returning_clause anger typen av returvärde.
  • STRICT kontrollerar om utdata från JSON-genereringsfunktionen är korrekt JSON. Om kontrollen misslyckas uppstår ett syntaxfel.
  • WITH UNIQUE KEYS garanterar att genererade JSON-objekt har unika nycklar.

Exempel

Här är ett exempel för att visa hur det fungerar:

SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;

Resultat:

{"score":37}

KEY del är valfri, så följande ger samma resultat:

SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;

Resultat:

{"score":37}

Inkapslade JSON

Om ett av värdena du skickar innehåller JSON kan du använda FORMAT JSON argument för att ange att den innehåller JSON och inte bör citeras i utdata.

Exempel:

SELECT JSON_OBJECTAGG(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}' 
    FORMAT JSON
    ) 
FROM DUAL;

Resultat:

{"details":{"name": "Peter", "score": 64}}

Här är vad som händer om vi tar bort FORMAT JSON del:

SELECT JSON_OBJECTAGG(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}'
    ) 
FROM DUAL;

Resultat:

{"details":"{\"name\": \"Peter\", \"score\": 64}"} 

Databasexempel

JSON_OBJECTAGG() funktion används vanligtvis för att producera JSON-dokument baserat på värdena i en databaskolumn.

Anta att vi kör följande fråga:

SELECT *
FROM jobs
WHERE min_salary > 9000;

Resultat:

    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

Här är ett exempel på hur vi kan använda JSON_OBJECTAGG() funktion för att skapa ett JSON-dokument från två av ovanstående kolumner:

SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary) 
FROM jobs
WHERE min_salary > 9000;

Resultat:

{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}

I det här fallet, job_id kolumnen är nyckeln och min_salary kolumn är värdet.

Se Oracles dokumentation för en mer detaljerad förklaring av denna funktion.


  1. Förstå händelseförlust med utökade händelser

  2. INFOGA ... PÅ DUPLIKATNYCKELUPPDATERING med VAR?

  3. Ansluter till fjärr MySQL-server med PHP

  4. Den ökända java.sql.SQLException:Ingen lämplig drivrutin hittades