JSON_UPDATE

Die Funktion JSON_UPDATE erstellt ein neues JSON-Objekt aus einem vorhandenen JSON-Objekt, indem der mithilfe eines SQL/JSON-Pfadausdrucks gefundene Wert geändert oder gelöscht wird.

Syntaxdiagramm lesenVisuelles Syntaxdiagramm überspringen JSON_UPDATE ( JSON-Ausdruck ,operation,sql-json-pfadausdruck,neuer-wert)
JSON-Ausdruck
Ein Ausdruck, der ein integrierter Zeichenfolgedatentyp ist. Wenn ein Zeichen-oder Grafikwert zurückgegeben wird, muss er ein ordnungsgemäß formatiertes JSON-Objekt enthalten. Wenn ein binärer Wert zurückgegeben wird, muss er die BSON-Darstellung eines JSON-Objekts enthalten.
Operation
Ein Ausdruck, der ein integrierter Zeichen-oder Grafikzeichenfolgedatentyp ist.
  • Der Wert SET gibt an, dass der vorhandene Wert bei sql-json-pfadausdruck durch neuer_wertersetzt werden muss.
  • Der Wert REMOVE gibt an, dass der durch sql-json-pfadausdruck angegebene Schlüssel und der zugehörige Wert entfernt werden sollen.
sql-json-pfadausdruck
Ein Zeichen-oder Grafikzeichenfolgeausdruck, der als SQL/JSON-Pfadausdruck interpretiert wird, der zum Suchen des zu aktualisierenden oder zu entfernenden Elements verwendet wird. Der JSON-Standardpfadmodus ist strict. Der Modus lax ist nicht zulässig. Ein neuer Schlüssel oder Feldgruppenindex kann nur für die SET-Operation verwendet werden, wenn das übergeordnete Element des Schlüssels oder Feldgruppenindex in JSON-Ausdruckvorhanden ist. Informationen über den Inhalt eines SQL/JSON-Pfadausdrucks finden Sie unter sql-json-path-expression.
neuwert
Ein Zeichen-oder Grafikzeichenfolgeausdruck, der den JSON-Wert angibt, der aktualisiert oder in das JSON-Objekt eingefügt werden soll. Wenn der angegebene Wert kein gültiger JSON-Wert ist, wird er in eine JSON-Zeichenfolge geändert.
Eine Zeichenfolge, die null enthält, wird als JSON-Nullwert und nicht als Zeichenfolge interpretiert. Ein boolescher Wert, der als Zeichenfolge von TRUE oder FALSE dargestellt wird, wird als Zeichenfolge interpretiert, da ein boolescher JSON-Wert true oder falsesein muss.
Dieser Parameter wird ignoriert, wenn operation auf REMOVE gesetzt ist.
Für eine SET-Operation:
  • Wenn ein Wert im angegebenen sql-json-pfadausdruckvorhanden ist, wird der Wert durch den neuen ersetzt.
  • Wenn im angegebenen sql-json-pfadausdruckkein Wert vorhanden ist, wird ein neuer Wert hinzugefügt.
Für die Operation REMOVE:
  • Wenn sql-json-pfadausdruck einen Schlüssel angibt, werden der Schlüssel und der Wert entfernt.
  • Wenn sql-json-path-expression ein Array-Element angibt, wird das durch sql-json-path-expression angegebene Array-Element entfernt.

Der Datentyp des Ergebnisses ist CLOB (2G) CCSID 1208, wenn JSON-Ausdruck Zeichen-oder Grafikdaten ist. Der Datentyp des Ergebnisses ist BLOB (2G), wenn JSON-Ausdruck binäre Daten ist. Wenn ein BLOB zurückgegeben wird, enthält es die BSON-Darstellung eines JSON-Dokuments.

Das Ergebnis kann null sein. Wenn das erste Argument null ist, ist das Ergebnis der Nullwert.

Beispiel

Diese Beispiele funktionieren mit einem JSON-Objekt, das ein Array mit drei Telefonerweiterungswerten enthält.
CREATE TABLE SANDBOX (DATA VARCHAR(1000) CCSID 1208)

INSERT INTO SANDBOX VALUES ('{"phone":[1111,2222,3333]}')
  • Um dem JSON-Objekt einen neuen Eintrag lastname hinzuzufügen, geben Sie einen Pfad an, der den neuen Schlüssel und den neuen Wert enthält.
    UPDATE SANDBOX SET DATA = JSON_UPDATE(DATA, 'SET', '$.lastname', 'HAAS') 
    Das Ergebnis ist das folgende aktualisierte JSON-Objekt:

    {"phone":[1111,2222,3333],"lastname":"HAAS"}

  • Um den Nachnamen von HAAS in LEE zu aktualisieren, geben Sie den Pfad zum Element lastname an.
    UPDATE SANDBOX SET DATA = JSON_UPDATE(DATA, 'SET', '$.lastname', 'LEE') 
    Das Ergebnis ist das folgende aktualisierte JSON-Objekt:

    {"phone":[1111,2222,3333],"lastname":"LEE"}

  • Um den zweiten Eintrag im Array zu aktualisieren, geben Sie den entsprechenden Index im Array an.
    UPDATE SANDBOX SET DATA = JSON_UPDATE(DATA, 'SET', '$.phone[1]', '9999') 
    Das Ergebnis ist das folgende aktualisierte JSON-Objekt:

    {"phone":[1111,9999,3333],"lastname":"LEE"}

  • Wenn beim Festlegen eines Array-Eintrags der Array-Index größer als die Array-Größe ist, wird der Wert am Ende des Arrays hinzugefügt.
    UPDATE SANDBOX SET DATA = JSON_UPDATE(DATA, 'SET', '$.phone[7]', '7777') 
    Das Ergebnis ist das folgende aktualisierte JSON-Objekt:

    {"phone":[1111,9999,3333,7777],"lastname":"LEE"}

  • Um den ersten Eintrag des Telefonbereichs auf null zu setzen, kann eine der folgenden Optionen verwendet werden:
    UPDATE SANDBOX SET DATA = JSON_UPDATE(DATA, 'SET', '$.phone[0]', NULL) 
    UPDATE SANDBOX SET DATA = JSON_UPDATE(DATA, 'SET', '$.phone[0]', 'null') 
    Das Ergebnis ist das folgende aktualisierte JSON-Objekt:

    {"phone":[null,9999,3333,7777],"lastname":"LEE"}

  • Verwenden Sie zum Löschen des lastname -Schlüssels und -Werts aus dem JSON-Objekt die Option REMOVE.
    UPDATE SANDBOX SET DATA = JSON_UPDATE(DATA, 'REMOVE', '$.lastname') 
    Das Ergebnis ist das folgende aktualisierte JSON-Objekt:

    {"phone":[null,9999,3333,7777]}

  • Um den ersten Eintrag aus dem Array phones zu entfernen, geben Sie den Feldgruppenindex an.
    UPDATE SANDBOX SET DATA = JSON_UPDATE(DATA, 'REMOVE', '$.phone[0]') 
    Das Ergebnis ist das folgende aktualisierte JSON-Objekt:

    {"phone":[null,3333,7777]}