2017-02-09 5 views
0

sagen, ich habe das in einer JSON-Spalte in einer Oracle-Datenbank gespeichert folgende:Oracle Wählen Sie aus JSON Spalte mit Bindestrichen Schlüssel

{ 
    "key-with-hyphens": "value" 
} 

diese Spalte Angenommen, in einer Tabelle genannt wird json_columnmy_table genannt, dann versuche ich den Wert für die "key-with-hyphens" Taste, um etwa so:

select json_column.key-with-hyphens from my_table; 

das gibt mir die folgende Fehlermeldung:

ORA-00936: missing expression 
00936. 00000 - "missing expression" 

Gibt es eine spezielle Syntax, die Sie verwenden müssen, wenn Sie den Wert für einen Bindestrich aus einer JSON-Spalte in Oracle auswählen?

Antwort

0

So stellt sich heraus, dass es ein paar Möglichkeiten, wie Sie dies tun können.

Methode 1:

tun es die ursprüngliche Art, wie ich versuchte, es gibt ein paar Probleme mit dieser Auswahl waren:

select json_column.key-with-hyphens from my_table; 

First off, Taste Auswahl in JSON Spalten wird nicht funktionieren, es sei denn, Sie alias die Tabelle als solche:

select mt.json_column.key-with-hyphens from my_table mt; 

Dies behebt jedoch nicht das Problem mit dem Bindestrich Schlüssel. Um hyphenated Schlüssel in dieser Syntax zulassen, müssen Sie den Namen des Schlüssels in Anführungszeichen wickeln:

select mt.json_column."key-with-hyphens" from my_table mt; 

Die obige Abfrage wird wie erwartet.

Methode 2:

Ein anderer Weg, dies zu tun, ohne die Tabelle zu Aliasing, wird unter Verwendung der json_value Funktion in der select-Klausel. Sie übergeben die JSON-Spalte als ersten Parameter und den vollständigen Pfad des Schlüssels, den Sie als zweiten Parameter auswählen möchten, unter Verwendung von $ als Stammkontext des in Ihrer Spalte gespeicherten JSON-Objekts. Die folgende Abfrage sollte auch wie erwartet:

select json_value(json_column, '$."key-with-hyphens"') from my_table; 
Verwandte Themen