Kategorien:

Funktionen für semistrukturierte und strukturierte Daten (Array/Objekt)

OBJECT_INSERT

Gibt ein Objekt zurück, das aus dem Eingabeobjekt mit einem neu eingefügten Schlüssel-Wert-Paar besteht (oder einem bestehenden Schlüssel, der mit einem neuen Wert aktualisiert wurde).

Syntax

OBJECT_INSERT( <object> , <key> , <value> [ , <updateFlag> ] )
Copy

Argumente

Benötigt:

object

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

key

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

value

Der dem Schlüssel zugeordnete Wert.

Optional:

updateFlag

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

Der Standardwert ist FALSE.

Nutzungshinweise

  • 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 Objekt eingefügt.

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

  • Wenn das optionale updateFlag-Argument auf TRUE gesetzt ist, wird der vorhandene Eingabeschlüssel key auf den Eingabewert value aktualisiert. Wenn updateFlag weggelassen oder auf FALSE gesetzt wird, führt das Aufrufen dieser Funktion mit einem Eingabeschlüssel, der bereits im Objekt vorhanden ist, zu einem Fehler.

  • Wenn das Aktualisierungsflag auf „TRUE“ gesetzt ist, aber der entsprechende Schlüssel noch nicht im Objekt vorhanden ist, wird das Schlüssel/Wert-Paar hinzugefügt.

  • Bei strukturierten OBJECTs:

    • Für die Argumente, die Schlüssel sind, müssen Sie Konstanten angeben.

    • Wenn das Argument updateFlag den Wert FALSE hat (wenn Sie ein neues Schlüssel-Wert-Paar einfügen):

      • Wenn Sie einen Schlüssel angeben, der bereits in OBJECT vorhanden ist, tritt ein Fehler auf.

        SELECT OBJECT_INSERT(
          {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR),
          'city',
          'San Jose',
          false
        );
        
        Copy
        093202 (23001): Function OBJECT_INSERT:
          expected structured object to not contain field city but it did.
        
      • Die Funktion gibt ein strukturiertes OBJECT zurück. Der Typ von OBJECT enthält den neu eingefügten Schlüssel. Angenommen, Sie fügen den Schlüssel zipcode mit dem DOUBLE-Wert 94402 hinzu:

        SELECT
          OBJECT_INSERT(
            {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR),
            'zip_code',
            94402::DOUBLE,
            false
          ) AS new_object,
          SYSTEM$TYPEOF(new_object);
        
        Copy

        Die Funktion liefert ein OBJECT vom Typ OBJECT(city VARCHAR, state VARCHAR, zipcode DOUBLE):

        +-------------------------------------+---------------------------------------------------------------------------------------+
        | NEW_OBJECT                          | SYSTEM$TYPEOF(NEW_OBJECT)                                                             |
        |-------------------------------------+---------------------------------------------------------------------------------------|
        | {                                   | OBJECT(city VARCHAR(16777216), state VARCHAR(16777216), zip_code FLOAT NOT NULL)[LOB] |
        |   "city": "San Mateo",              |                                                                                       |
        |   "state": "CA",                    |                                                                                       |
        |   "zip_code": 9.440200000000000e+04 |                                                                                       |
        | }                                   |                                                                                       |
        +-------------------------------------+---------------------------------------------------------------------------------------+
        

        Der Typ des eingefügten Wertes bestimmt den Typ, der der OBJECT-Typdefinition hinzugefügt wird. In diesem Fall ist der Wert für zipcode ein in DOUBLE umgewandelter Wert, sodass zipcode den Typ DOUBLE hat.

    • Wenn das Argument updateFlag den Wert TRUE hat (wenn Sie ein vorhandenes Schlüssel-Wert-Paar ersetzen):

      • Wenn Sie einen Schlüssel angeben, der in OBJECT nicht vorhanden ist, tritt ein Fehler auf.

      • Die Funktion gibt ein strukturiertes OBJECT desselben Typs zurück.

      • Der Typ des eingefügten Wertes wird implizit umgewandelt (Koersion) in den Typ des vorhandenen Schlüssels.

Beispiele

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

SELECT OBJECT_INSERT(OBJECT_CONSTRUCT('a',1,'b',2),'c',3);

----------------------------------------------------+
 OBJECT_INSERT(OBJECT_CONSTRUCT('A',1,'B',2),'C',3) |
----------------------------------------------------+
 {                                                  |
   "a": 1,                                          |
   "b": 2,                                          |
   "c": 3                                           |
 }                                                  |
----------------------------------------------------+
Copy

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

  • Key_One besteht aus einem JSON NULL-Wert.

  • Key_Two besteht aus einem SQL NULL-Wert und wird daher weggelassen.

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

SELECT
  OBJECT_INSERT(OBJECT_INSERT(OBJECT_INSERT(OBJECT_CONSTRUCT(), 'Key_One', PARSE_JSON('NULL')), 'Key_Two', NULL), 'Key_Three', 'null')
  AS obj;

-----------------------+
          OBJ          |
-----------------------+
 {                     |
   "Key_One": null,    |
   "Key_Three": "null" |
 }                     |
-----------------------+
Copy

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

SELECT OBJECT_INSERT(OBJECT_INSERT(OBJECT_CONSTRUCT(),'k1', 100),'k1','string-value', TRUE) AS obj;

------------------------+
          OBJ           |
------------------------+
 {                      |
   "k1": "string-value" |
 }                      |
------------------------+
Copy