sql >> Database >  >> RDS >> Oracle

JSON_TABLE() Functie in Oracle

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:

  • expr is het JSON-document dat u wilt opvragen
  • JSON_basic_path_expression is de SQL/JSON-padexpressie.
  • JSON_query_on_error_clause specificeert de waarde die wordt geretourneerd wanneer bepaalde fouten optreden.
  • JSON_query_on_empty_clause specificeert de waarde die wordt geretourneerd als er geen overeenkomst wordt gevonden.
  • JSON_columns_clause definieert 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:

  • NULL ON EMPTY – Retourneert null wanneer er geen overeenkomst is gevonden.
  • ERROR ON EMPTY – Retourneert de juiste Oracle-fout wanneer er geen overeenkomst wordt gevonden.
  • DEFAULT literal ON EMPTY – Retourneert literal wanneer er geen match wordt gevonden. Het gegevenstype literal moet 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.


  1. Leer databaseontwerp met SQL Server Management Studio (SSMS) - deel 2

  2. Queryresultaten retourneren als een door komma's gescheiden lijst in Oracle

  3. ver.2 PyGreSQL ERROR:from _pg import * ImportError:DLL load failed:De opgegeven module kon niet worden gevonden

  4. Controleer of de tekenreeks tekens met accenten bevat in SQL?