JSON_TABLE
Die Tabellenfunktion JSON_TABLE gibt eine Ergebnistabelle aus der Auswertung von SQL/JSON-Pfadausdrücken zurück. Jedes Element in der Ergebnissequenz des Zeilen-SQL/JSON-Pfadausdrucks stellt eine oder mehrere Zeilen in der Ergebnistabelle dar.
- JSON-Ausdruck
- Gibt einen Ausdruck an, der einen Zeichen-, Grafik-oder Binärzeichenfolgewert zurückgibt. 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.
- FORMAT JSON oder FORMAT BSON
- Gibt an, wie JSON-Ausdruck interpretiert werden soll.
- JSON FORMATIEREN
- Gibt an, dass JSON-Ausdruck JSON-Daten enthält. Wenn JSON-Ausdruck Binärdaten ist, werden die Daten als UTF-8 oder UTF-16interpretiert. Die Binärdaten können nicht mit einer EBCDIC-CCSID codiert werden.
- BSON FORMAT
- Gibt an, dass JSON-Ausdruck die BSON-Darstellung von JSON-Daten enthält. Wenn FORMAT BSON angegeben wird, muss JSON-Ausdruck ein binärer Zeichenfolgedatentyp sein.
- sql-json-pfadausdruck
- Gibt einen Zeichen-oder Grafikzeichenfolgeausdruck an, der als SQL/JSON-Pfadausdruck interpretiert wird. Schlüsselwörter in sql-json-path-expression müssen in Kleinbuchstaben angegeben werden. Dieser Ausdruck gibt eine Ausgabesequenz zurück, in der jedes Element in der Sequenz von den Spaltendefinitionen verwendet wird, um eine oder mehrere Zeilen in der Ausgabetabelle zu generieren. Wenn die Ausgabesequenz leer ist, ist das Ergebnis von JSON_TABLE eine leere Tabelle. sql-json-pfadausdruck darf keine leere Zeichenfolge oder nur aus Leerzeichen bestehen.
- AS pfadname
- Gibt einen Namen an, der verwendet werden soll, um den sql-json-pfadausdruckanzugeben.
- EMPTY ON ERROR oder ERROR ON ERROR
- Gibt das gewünschte Verhalten von JSON_TABLE an, wenn ein Fehler auf Tabellenebene auftritt.
- LEER BEI FEHLER
- Eine leere Tabelle wird zurückgegeben, wenn ein Fehler auf Tabellenebene auftritt. Dies ist der Standardwert.
- FEHLER BEI FEHLER
- Wenn ein Fehler auf Tabellenebene auftritt, wird ein Fehler zurückgegeben.
- SPALTEN
- Gibt die Ausgabespalten der Ergebnistabelle an, einschließlich des Spaltennamens, des Datentyps und der Art der Berechnung des Spaltenwerts für jede Zeile.
| JSON-Typ | SQL-Typ | Hinweise |
|---|---|---|
| Nummer | SMALLINT
GANZE ZAHL BIGINT |
Liegt der Quellenwert außerhalb des Bereichs des Zieldatentyps, wird ein Überlauffehler zurückgegeben. |
| Nummer | DEZIMAL
NUMERISCH |
Der resultierende Zahlenwert wird, falls erforderlich, in die Genauigkeit und den Maßstab des Zieldatentyps konvertiert. Die erforderliche Anzahl führender Nullen wird hinzugefügt bzw. entfernt. Im Bruchteil der Zahl wird die erforderliche Anzahl nachfolgender Nullen addiert oder die erforderliche Anzahl Ziffern eliminiert. Dieses Abschneideverhalten ähnelt dem Verhalten der Umsetzung von DECIMAL in DECIMAL. |
| Nummer | FLOAT
DOUBLE REAL DECFLOAT |
Liegt der Quellenwert außerhalb des Bereichs des Zieldatentyps, wird ein Überlauffehler zurückgegeben. Wenn der Quellenwert mehr signifikante Ziffern als die Genauigkeit des Zieldatentyps enthält, wird der Quellenwert auf die Genauigkeit des Zieldatentyps gerundet. |
| Zeichenfolge oder Zahl | Char
VARCHAR CLOB GRAPHIC VARGRAPHIC DBCLOB |
Der resultierende Wert wird, falls erforderlich, mithilfe der unter Konvertierungsregeln für Zuordnungen beschriebenen Regeln in die CCSID des Zieldatentyps konvertiert, bevor er in den Zieltyp mit einer begrenzten Länge konvertiert wird. Das Abschneiden erfolgt, wenn die angegebene Längenbegrenzung kleiner als die Länge der Ergebniszeichenfolge nach der CCSID-Konvertierung ist. Wenn Zeichen, die keine Leerzeichen sind, abgeschnitten werden, tritt eine Warnung auf. Ist der Zieltyp eine Zeichenfolge mit fester Länge (CHAR oder GRAPHIC) und ist die angegebene Länge des Zieltyps größer als die Länge der Ergebniszeichenfolge aus der CCSID-Konvertierung, werden am Ende Leerzeichen aufgefüllt. Dieses Abschneid-und Auffüllverhalten ähnelt der Abrufzuordnung von Zeichen-oder Grafikzeichenfolgen. |
Zeichenfolge oder Zahl![]() |
BOOLEAN![]() |
Der Ergebniswert wird gemäß den Regeln für boolesche Zuordnungen, die in Boolesche Zuordnungenbeschrieben sind, in einen booleschen Wert konvertiert. ![]() |
| Zeichenfolge | DATUM | Die JSON-Zeichenfolge wird in einen Datumswert konvertiert. Die JSON-Zeichenfolge muss eines der folgenden Formate haben:
|
| Zeichenfolge | ZEIT | Die JSON-Zeichenfolge wird in einen Zeitwert konvertiert. Die JSON-Zeichenfolge muss eines der folgenden Formate haben:
|
| Zeichenfolge | TIMESTAMP | Die JSON-Zeichenfolge wird in einen Zeitmarkenwert konvertiert. Die JSON-Zeichenfolge muss eines der folgenden Formate haben:
|
boolesch![]() |
BOOLEAN ![]() |
Ein boolescher JSON-Wert wird als boolescher Wert zurückgegeben. ![]() |
| boolesch | CHAR VARCHAR CLOB GRAPHIC VARGRAPHIC DBCLOB |
Ein boolescher JSON-Wert wird in eine true -oder false -Zeichenfolge konvertiert und unter Verwendung der Konvertierungsregeln für JSON-Zeichenfolgen als Zeichenfolge zurückgegeben. |
boolesch![]() |
![]() SMALLINT INTEGER BIGINT DECFLOAT ![]() |
Ein boolescher JSON-Wert wird als numerischer Wert 0 (falsch) oder 1 (wahr) zurückgegeben.![]() |
| Array oder Objekt | Char
VARCHAR CLOB GRAPHIC VARGRAPHIC DBCLOB |
Muss mit einer FORMAT JSON-Spalte zurückgegeben werden. JSON-Arrays oder -Objekte werden als Zeichenfolgen im JSON-Format zurückgegeben. Die resultierende Konvertierung ist dieselbe wie bei Zeichenfolgetypen. |
| Null | Beliebig | Ein JSON-Nullwert wird in einen SQL-Nullwert konvertiert. |
Beispiele
Diese Beispiele beziehen sich auf das folgende JSON-Dokument:
{
"id" : 901,
"name" : { "first":"John", "last":"Doe" },
"phones": [ { "type":"home", "number":"555-3762"},
{ "type":"work", "number":"555-8792"}]
}- Listen Sie die Mitarbeiter-ID, den Vornamen, den Nachnamen sowie den ersten Telefontyp und die erste Telefonnummer auf:
Rückgaben:SELECT U."id", U."first name",U."last name",U."phone type",U."phone number" FROM EMPLOYEE_TABLE E, JSON_TABLE(E.jsondoc, 'lax $' COLUMNS( "id" INTEGER, "first name" VARCHAR(20) PATH 'lax $.name.first', "last name" VARCHAR(20) PATH 'lax $.name.last', "phone type" VARCHAR(20) PATH 'lax $.phones[0].type', "phone number" VARCHAR(20) PATH 'lax $.phones[0].number') ) AS Uid first name last name phone type phone number --- ---------- --------- ---------- ------------ 901 John Doe home 555-3762 - Listen Sie die Mitarbeiter-ID, den Vornamen, den Nachnamen und alle verfügbaren Telefontypen und -nummern auf:
Rückgaben:SELECT U."id", U."first name",U."last name",U."phone type",U."number" AS "phone number" FROM EMPLOYEE_TABLE E, JSON_TABLE(E.jsondoc, 'lax $' COLUMNS( "id" INTEGER, "first name" VARCHAR(20) PATH 'lax $.name.first', "last name" VARCHAR(20) PATH 'lax $.name.last', NESTED PATH 'lax $.phones[*]' COLUMNS ( "phone type" VARCHAR(20) PATH 'lax $.type', "number" VARCHAR(20) ) ) ) AS Uid first name last name phone type phone number --- ---------- --------- ---------- ------------ 901 John Doe home 555-3762 901 John Doe work 555-8792

Zeichenfolge oder Zahl