Oracle Databaseでは、JSON_TABLE()
関数は、JSONデータのリレーショナルビューを作成します。これにより、JSONドキュメントの値を表形式(行と列)で表示できます。
構文
構文は次のようになります:
JSON_TABLE
( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
[ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ]
JSON_columns_clause )
場所:
-
expr
クエリするJSONドキュメントです -
JSON_basic_path_expression
SQL/JSONパス式です。 -
JSON_query_on_error_clause
特定のエラーが発生したときに返される値を指定します。 -
JSON_query_on_empty_clause
一致するものが見つからない場合に返される値を指定します。 -
JSON_columns_clause
関数によって返される仮想リレーショナルテーブルの列を定義します。
JSON_TABLE()
関数はFROM
でのみ使用できます SELECT
の句 ステートメント。
例
これがどのように機能するかを示す例です:
SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c));
結果:
A B C ____ ____ ____ 1 2 3
ここに少し多くのデータがあります:
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)
);
結果:
A B C ____ ____ ____ 1 2 3 4 5 6 7 8 9
少ない列
COLUMNS
で指定された列の数を減らすとどうなりますか。 条項:
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)
);
結果:
A B ____ ____ 1 2 4 5 7 8
SELECT
で選択した列を指定することで、同じ結果を得ることができます。 リスト:
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)
);
結果:
A B ____ ____ 1 2 4 5 7 8
特定の行を選択
WHERE
のような句を使用できます 特定の条件を満たす行のみを選択するには:
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;
結果:
A B C ____ ____ ____ 4 5 6
エラー処理
次の句を使用してエラーを処理できます。
-
NULL ON ERROR
- 入力が整形式のJSONでない場合、エラーが検出されたポイントからそれ以上の行は返されません。
- 行パス式の評価時に一致するものが見つからない場合、行は返されません。
- すべての列式のデフォルトのエラー動作を
NULL ON ERROR
に設定します
-
ERROR ON ERROR
- 入力が整形式のJSONでない場合、エラーが発生します。
- 行パス式の評価時に一致するものが見つからない場合、エラーが発生します
- すべての列式のデフォルトのエラー動作を
ERROR ON ERROR
に設定します
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)
);
結果:
A B C ____ ____ ____ 1 2 3 4 5 6
JSON_TABLE()
以降 関数はストリーミング評価をサポートし、入力の一部でエラーが発生する前に行を返すことができます。これはまさにこの例で確認できることです。最初の2行は取得しましたが、3行目は取得していません(JSONのその部分が整形式のJSONではないため)。
これがERROR ON ERROR
です。 条項:
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)
);
結果:
Error report - ORA-40441: JSON syntax error
空の結果の処理
句を使用して、一致するものが見つからない場合に返される値を指定することもできます。この句を使用すると、このタイプのエラーに対して、エラー句で指定された結果とは異なる結果を指定できます。
これらの条項は次のとおりです。
-
NULL
ON
EMPTY
–一致するものが見つからない場合はnullを返します。 ERROR
ON
EMPTY
–一致するものが見つからない場合、適切なOracleエラーを返します。-
DEFAULT
literal
ON
EMPTY
–literal
を返します 一致するものが見つからない場合。literal
のデータ型 この関数によって返される値のデータ型と一致する必要があります。
JSON_TABLE()
の詳細は、Oracleのドキュメントを参照してください。 機能。