Dans Oracle Database, le JSON_TABLE()
La fonction crée une vue relationnelle des données JSON. Il vous permet de présenter les valeurs d'un document JSON sous forme de tableau - sous forme de lignes et de colonnes.
Syntaxe
La syntaxe ressemble à ceci :
JSON_TABLE
( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
[ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ]
JSON_columns_clause )
Où :
expr
est le document JSON que vous souhaitez interrogerJSON_basic_path_expression
est l'expression de chemin SQL/JSON.JSON_query_on_error_clause
spécifie la valeur renvoyée lorsque certaines erreurs se produisent.JSON_query_on_empty_clause
spécifie la valeur renvoyée si aucune correspondance n'est trouvée.JSON_columns_clause
définit les colonnes de la table relationnelle virtuelle renvoyée par la fonction.
Le JSON_TABLE()
la fonction ne peut être utilisée que dans le FROM
clause d'un SELECT
déclaration.
Exemple
Voici un exemple pour illustrer son fonctionnement :
SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c));
Résultat :
A B C ____ ____ ____ 1 2 3
La voici avec un peu plus de données :
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)
);
Résultat :
A B C ____ ____ ____ 1 2 3 4 5 6 7 8 9
Moins de colonnes
Voici ce qui se passe si nous réduisons le nombre de colonnes spécifiées dans le COLUMNS
clause :
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)
);
Résultat :
A B ____ ____ 1 2 4 5 7 8
Nous pouvons obtenir le même résultat en spécifiant les colonnes sélectionnées dans le 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)
);
Résultat :
A B ____ ____ 1 2 4 5 7 8
Sélectionner des lignes spécifiques
Nous pouvons utiliser des clauses comme WHERE
pour ne sélectionner que les lignes qui satisfont à certains critères :
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;
Résultat :
A B C ____ ____ ____ 4 5 6
Gestion des erreurs
Nous pouvons utiliser les clauses suivantes pour traiter les erreurs :
NULL ON ERROR
- Si l'entrée n'est pas un JSON bien formé, aucune autre ligne n'est renvoyée à partir du moment où l'erreur est détectée.
- Si aucune correspondance n'est trouvée lors de l'évaluation de l'expression de chemin de ligne, aucune ligne n'est renvoyée.
- Définit le comportement d'erreur par défaut pour toutes les expressions de colonne sur
NULL ON ERROR
ERROR ON ERROR
- Si l'entrée n'est pas un JSON bien formé, une erreur est générée.
- Si aucune correspondance n'est trouvée lors de l'évaluation de l'expression de chemin de ligne, une erreur sera générée
- Définit le comportement d'erreur par défaut pour toutes les expressions de colonne sur
ERROR ON ERROR
Voici un exemple de 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)
);
Résultat :
A B C ____ ____ ____ 1 2 3 4 5 6
Depuis le JSON_TABLE()
prend en charge l'évaluation en continu, les lignes peuvent être renvoyées avant de rencontrer la partie de l'entrée avec l'erreur. C'est exactement ce que nous pouvons voir avec cet exemple - nous avons les deux premières lignes, mais pas la troisième (car cette partie du JSON n'est pas bien formée).
Le voici avec le ERROR ON ERROR
clause :
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)
);
Résultat :
Error report - ORA-40441: JSON syntax error
Gestion des résultats vides
Vous pouvez également utiliser une clause pour spécifier la valeur renvoyée si aucune correspondance n'est trouvée. Cette clause vous permet de spécifier un résultat différent pour ce type d'erreur que le résultat spécifié avec les clauses d'erreur.
Ces clauses sont :
NULL
ON
EMPTY
– Renvoie null lorsqu'aucune correspondance n'est trouvée.ERROR
ON
EMPTY
– Renvoie l'erreur Oracle appropriée lorsqu'aucune correspondance n'est trouvée.DEFAULT
literal
ON
EMPTY
– Renvoieliteral
lorsqu'aucune correspondance n'est trouvée. Le type de données deliteral
doit correspondre au type de données de la valeur renvoyée par cette fonction.
Voir la documentation Oracle pour plus d'informations sur le JSON_TABLE()
fonction.