I Oracle Database er JSON_TABLE()
funktion opretter en relationel visning af JSON-data. Det giver dig mulighed for at præsentere værdierne i et JSON-dokument i tabelformat – som rækker og kolonner.
Syntaks
Syntaksen ser sådan ud:
JSON_TABLE
( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
[ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ]
JSON_columns_clause )
Hvor:
expr
er det JSON-dokument, du vil forespørge påJSON_basic_path_expression
er SQL/JSON-stiudtrykket.JSON_query_on_error_clause
angiver den værdi, der returneres, når visse fejl opstår.JSON_query_on_empty_clause
angiver den værdi, der returneres, hvis der ikke findes noget match.JSON_columns_clause
definerer kolonnerne i den virtuelle relationstabel, der returneres af funktionen.
JSON_TABLE()
funktionen kan kun bruges i FROM
klausul af en SELECT
erklæring.
Eksempel
Her er et eksempel for at demonstrere, hvordan det virker:
SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c));
Resultat:
A B C ____ ____ ____ 1 2 3
Her er den med lidt flere data:
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)
);
Resultat:
A B C ____ ____ ____ 1 2 3 4 5 6 7 8 9
Færre kolonner
Her er, hvad der sker, hvis vi reducerer antallet af kolonner, der er angivet i COLUMNS
klausul:
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)
);
Resultat:
A B ____ ____ 1 2 4 5 7 8
Vi kan opnå det samme resultat ved at angive udvalgte kolonner i SELECT
liste:
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)
);
Resultat:
A B ____ ____ 1 2 4 5 7 8
Vælg specifikke rækker
Vi kan bruge klausuler som WHERE
for kun at vælge de rækker, der opfylder et bestemt kriterium:
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;
Resultat:
A B C ____ ____ ____ 4 5 6
Fejlhåndtering
Vi kan bruge følgende klausuler til at håndtere fejl:
NULL ON ERROR
- Hvis input ikke er veludformet JSON, returneres der ikke flere rækker fra det punkt, hvor fejlen er opdaget.
- Hvis der ikke findes noget match, når rækkestiudtrykket evalueres, returneres ingen rækker.
- Indstiller standardfejladfærden for alle kolonneudtryk til
NULL ON ERROR
ERROR ON ERROR
- Hvis input ikke er veludformet JSON, opstår der en fejl.
- Hvis der ikke findes noget match, når rækkestiudtrykket evalueres, vil der blive rejst en fejl
- Indstiller standardfejladfærden for alle kolonneudtryk til
ERROR ON ERROR
Her er et eksempel på 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)
);
Resultat:
A B C ____ ____ ____ 1 2 3 4 5 6
Siden JSON_TABLE()
funktionen understøtter streamingevaluering, rækker kan returneres, før de støder på den del af inputtet med fejlen. Det er præcis, hvad vi kan se med dette eksempel – vi fik de to første rækker, men ikke den tredje (på grund af den del af JSON, der ikke er veludformet JSON).
Her er den med ERROR ON ERROR
klausul:
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)
);
Resultat:
Error report - ORA-40441: JSON syntax error
Håndtering af tomme resultater
Du kan også bruge en klausul til at angive den returnerede værdi, hvis der ikke findes noget match. Denne klausul giver dig mulighed for at angive et andet udfald for denne type fejl end det resultat, der er angivet med fejlklausulerne.
Disse klausuler er:
NULL
ON
EMPTY
– Returnerer null, når der ikke findes noget match.ERROR
ON
EMPTY
– Returnerer den relevante Oracle-fejl, når der ikke findes noget match.DEFAULT
literal
ON
EMPTY
– Returnererliteral
når der ikke findes noget match. Datatypenliteral
skal matche datatypen for den værdi, der returneres af denne funktion.
Se Oracle-dokumentationen for at få flere oplysninger om JSON_TABLE()
funktion.