In Oracle Database, de JSON_TABLE() functie maakt een relationele weergave van JSON-gegevens. Hiermee kunt u de waarden in een JSON-document in tabelformaat presenteren - als rijen en kolommen.
Syntaxis
De syntaxis gaat als volgt:
JSON_TABLE
( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
[ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ]
JSON_columns_clause ) Waar:
expris het JSON-document dat u wilt opvragenJSON_basic_path_expressionis de SQL/JSON-padexpressie.JSON_query_on_error_clausespecificeert de waarde die wordt geretourneerd wanneer bepaalde fouten optreden.JSON_query_on_empty_clausespecificeert de waarde die wordt geretourneerd als er geen overeenkomst wordt gevonden.JSON_columns_clausedefinieert de kolommen in de virtuele relationele tabel die door de functie wordt geretourneerd.
De JSON_TABLE() functie kan alleen worden gebruikt in de FROM clausule van een SELECT verklaring.
Voorbeeld
Hier is een voorbeeld om te laten zien hoe het werkt:
SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c)); Resultaat:
A B C ____ ____ ____ 1 2 3
Hier is het met iets meer gegevens:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
); Resultaat:
A B C ____ ____ ____ 1 2 3 4 5 6 7 8 9
Minder kolommen
Dit is wat er gebeurt als we het aantal kolommen verminderen dat is gespecificeerd in de COLUMNS clausule:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b)
); Resultaat:
A B ____ ____ 1 2 4 5 7 8
We kunnen hetzelfde resultaat bereiken door geselecteerde kolommen op te geven in de SELECT lijst:
SELECT a, b
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
); Resultaat:
A B ____ ____ 1 2 4 5 7 8
Selecteer specifieke rijen
We kunnen clausules gebruiken zoals WHERE om alleen die rijen te selecteren die aan bepaalde criteria voldoen:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]',
'$[*]'
COLUMNS(a, b, c)
)
WHERE b = 5; Resultaat:
A B C ____ ____ ____ 4 5 6
Foutafhandeling
We kunnen de volgende clausules gebruiken om met fouten om te gaan:
NULL ON ERROR- Als de invoer geen goed gevormde JSON is, worden er geen rijen meer geretourneerd vanaf het punt waarop de fout is gedetecteerd.
- Als er geen overeenkomst wordt gevonden wanneer de rijpadexpressie wordt geëvalueerd, worden er geen rijen geretourneerd.
- Stelt het standaard foutgedrag voor alle kolomuitdrukkingen in op
NULL ON ERROR
ERROR ON ERROR- Als de invoer geen goed gevormde JSON is, wordt er een fout gegenereerd.
- Als er geen overeenkomst wordt gevonden wanneer de rijpadexpressie wordt geëvalueerd, wordt er een fout gegenereerd
- Stelt het standaard foutgedrag voor alle kolomuitdrukkingen in op
ERROR ON ERROR
Hier is een voorbeeld van NULL ON ERROR :
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]',
'$[*]'
NULL ON ERROR
COLUMNS(a, b, c)
); Resultaat:
A B C ____ ____ ____ 1 2 3 4 5 6
Sinds de JSON_TABLE() functie ondersteunt streaming-evaluatie, rijen kunnen worden geretourneerd voordat het gedeelte van de invoer met de fout wordt aangetroffen. Dat is precies wat we in dit voorbeeld kunnen zien - we hebben de eerste twee rijen, maar niet de derde (omdat dat deel van de JSON geen goed gevormde JSON is).
Hier is het met de ERROR ON ERROR clausule:
SELECT *
FROM JSON_TABLE(
'[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]',
'$[*]'
ERROR ON ERROR
COLUMNS(a, b, c)
); Resultaat:
Error report - ORA-40441: JSON syntax error
Lege resultaten afhandelen
U kunt ook een clausule gebruiken om de waarde op te geven die wordt geretourneerd als er geen overeenkomst wordt gevonden. Met deze clausule kunt u een andere uitkomst voor dit type fout specificeren dan de uitkomst die is gespecificeerd met de foutclausules.
Deze clausules zijn:
NULLONEMPTY– Retourneert null wanneer er geen overeenkomst is gevonden.ERRORONEMPTY– Retourneert de juiste Oracle-fout wanneer er geen overeenkomst wordt gevonden.DEFAULTliteralONEMPTY– Retourneertliteralwanneer er geen match wordt gevonden. Het gegevenstypeliteralmoet overeenkomen met het gegevenstype van de waarde die door deze functie wordt geretourneerd.
Zie de Oracle-documentatie voor meer informatie over de JSON_TABLE() functie.