sql >> データベース >  >> RDS >> Oracle

OracleのJSON_TABLE()関数

    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 EMPTYliteralを返します 一致するものが見つからない場合。 literalのデータ型 この関数によって返される値のデータ型と一致する必要があります。

    JSON_TABLE()の詳細は、Oracleのドキュメントを参照してください。 機能。


    1. CTE、サブクエリ、一時テーブル、またはテーブル変数の間にパフォーマンスの違いはありますか?

    2. MySQLWorkbenchを使用したMySQLデータベースのリバースエンジニアリング

    3. PHP警告:mysqli_connect():(HY000 / 2002):接続が拒否されました

    4. 親と無限の子を返すステートメントを選択します