Kategorien:

Funktionen für semistrukturierte und strukturierte Daten (Zuordnung/Map)

MAP_INSERT

Gibt ein neues MAP-Objekt zurück, das aus dem Eingabe-MAP-Objekt besteht, in das ein neues Schlüssel-Wert-Paar eingefügt wurde (oder ein bestehender Schlüssel wurde mit einem neuen Wert aktualisiert).

Syntax

MAP_INSERT( <map> , <key> , <value> [ , <updateFlag> ] )
Copy

Argumente

map

Das Zuordnungs-Quellobjekt, in das das neue Schlüssel-Wert-Paar eingefügt wird.

key

Der neue Schlüssel, der in die Zuordnung eingefügt werden soll. Muss sich von allen in der Zuordnung vorhandenen Schlüsseln unterscheiden, es sei denn, updateFlag ist auf TRUE gesetzt.

value

Der dem Schlüssel zugeordnete Wert.

Optional

updateFlag

Ein Boolesches Flag, das bei der Einstellung TRUE angibt, dass der Eingabewert zum Aktualisieren/Überschreiben eines vorhandenen Schlüssels im Zuordnungsobjekt verwendet werden soll, anstatt ein neues Schlüssel-Wert-Paar einzufügen.

Der Standardwert ist FALSE.

Rückgabewerte

Gibt ein MAP-Objekt zurück, das aus dem Eingabe-MAP-Objekt, in das ein neues Schlüssel-Wert-Paar eingefügt wurde oder ein bestehender Schlüssel wurde mit einem neuen Wert aktualisiert.

Nutzungshinweise

  • Der Typ des Schlüsselausdrucks muss mit dem Typ des Schlüssels der Zuordnung übereinstimmen. Wenn der Typ VARCHAR ist, können die Typen unterschiedlich lang sein.

  • Die Funktion unterstützt JSON NULL-Werte, aber keine SQL NULL-Werte oder -Schlüssel:

    • Wenn der Schlüssel key eine beliebige andere Zeichenfolge als NULL ist und der Wert value ein JSON-NULL-Wert ist (z. B. PARSE_JSON(‚NULL‘)), wird das Schlüssel-Wert-Paar in das zurückgegebene Zuordnungsobjekt eingefügt.

    • Wenn der Schlüssel key eine beliebige andere Zeichenfolge als NULL ist und value ein SQL-NULL-Wert ist (z. B. NULL), dann wird der in einen JSON-NULL-Wert konvertiert, und das Schlüssel-Wert-Paar in das zurückgegebene Zuordnungsobjekt eingefügt.

    • Wenn key ein SQL-NULL-Wert ist, wird das Schlüssel-Wert-Paar aus dem zurückgegebenen Zuordnungsobjekt weggelassen.

  • Wenn updateFlag auf TRUE gesetzt wird, dann wird das bestehende Eingabe-key-Objekt auf den Eingabewert value aktualisiert. Wenn updateFlag weggelassen oder auf FALSE gesetzt wird und der Eingabeschlüssel bereits in dem Zuordnungsobjekt existiert, wird ein Fehler zurückgegeben.

  • Wenn updateFlag auf TRUE gesetzt wird, der entsprechende Schlüssel aber noch nicht im Zuordnungsobjekt vorhanden ist, wird das Schlüssel-Wert-Paar hinzugefügt.

Beispiele

Einfügen eines dritten Schlüssel-Wert-Paars in ein Zuordnungsobjekt, das zwei Schlüssel-Wert-Paare enthält:

SELECT MAP_INSERT({'a':1,'b':2}::MAP(VARCHAR,NUMBER),'c',3);
Copy
+------------------------------------------------------+
| MAP_INSERT({'A':1,'B':2}::MAP(VARCHAR,NUMBER),'C',3) |
|------------------------------------------------------|
| {                                                    |
|   "a": 1,                                            |
|   "b": 2,                                            |
|   "c": 3                                             |
| }                                                    |
+------------------------------------------------------+

Einfügen von zwei neuen Schlüssel-Wert-Paaren in ein leeres Zuordnungsobjekt, wobei ein Schlüssel-Wert-Paar weglassen wird:

  • Key_One besteht aus einem JSON NULL-Wert.

  • Key_Two besteht aus einem SQL-NULL-Wert, der in einen JSON-NULL-Wert konvertiert wird.

  • Key_Three besteht aus einer Zeichenfolge, die „null“ enthält.

SELECT MAP_INSERT(MAP_INSERT(MAP_INSERT({}::MAP(VARCHAR,VARCHAR),
  'Key_One', PARSE_JSON('NULL')), 'Key_Two', NULL), 'Key_Three', 'null');
Copy
+---------------------------------------------------------------------------+
| MAP_INSERT(MAP_INSERT(MAP_INSERT({}::MAP(VARCHAR,VARCHAR),                |
|    'KEY_ONE', PARSE_JSON('NULL')), 'KEY_TWO', NULL), 'KEY_THREE', 'NULL') |
|---------------------------------------------------------------------------|
| {                                                                         |
|   "Key_One": null,                                                        |
|   "Key_Three": "null",                                                    |
|   "Key_Two": null                                                         |
| }                                                                         |
+---------------------------------------------------------------------------+

Aktualisieren eines vorhandenen Schlüssel-Wert-Paares ("k1": 100) mit einem neuen Wert ("string-value"):

SELECT MAP_INSERT({'k1':100}::MAP(VARCHAR,VARCHAR), 'k1', 'string-value', TRUE) AS map;
Copy
+------------------------+
| MAP                    |
|------------------------|
| {                      |
|   "k1": "string-value" |
| }                      |
+------------------------+