『Oracle Database JSON開発者ガイド』の今回のリリースにおける変更点

このマニュアルのOracle Databaseの変更点について説明します。

『Oracle Database JSON開発者ガイド』は、Oracle Database 12cリリース2 (12.2.0.1)の新しいマニュアルでした。Oracle Database 12cリリース1 (12.1.0.2)でのJSONデータの使用に関する情報は、Oracle XML DB開発者ガイドで説明しています。

JSON開発者ガイドのOracle Databaseリリース19cバージョン19.1における変更点

Oracle Databaseリリース19cバージョン19.1でのJSONサポートと『Oracle Database JSON開発者ガイド』の変更点について説明します。

新機能

このリリースの新機能は次のとおりです。

JSONのマテリアライズド・ビューのサポート

パフォーマンスの拡張: json_tableでON STATEMENTでリフレッシュされるマテリアライズド・ビューを作成し、かつ他の一定の条件に該当する場合は、そのビューを定義する問合せと一致する問合せをマテリアライズド・ビュー表アクセスにリライトできます。複数のファンクション索引を作成するかわりに、この機能を使用できます。

SQLファンクションJSON_MERGEPATCH: JSONドキュメントの宣言的更新

新しいSQLファンクションjson_mergepatchを使用して、JSONドキュメントを宣言的に更新できるようになりました。1つの文を使用して、1つ以上の変更を複数のドキュメントに適用できます。この機能により、JSON更新操作の柔軟性が向上します。

新しいSQL/JSONファンクションJSON_SERIALIZEおよびGeoJSONデータJSONデータ・ガイド・サポート

新しいSQLファンクションjson_serializeを使用して、JSONデータをテキストまたはUTFエンコードされたBLOBデータにシリアライズできます。SQL集計ファンクションjson_dataguideは、GeoJSON地理データをドキュメント内で検出できるようになりました。これを使用して、このようなデータをSQLデータ型SDO_GEOMETRYとして投影するビューを作成できます。

構文の簡素化

Syntaxは、SQL/JSONパス式およびファンクションjson_objectによるSQL/JSON生成に対して提供されます。新しいSQL問合せ句NESTEDは、json_tableLEFT OUTER JOINとともに使用する単純な代替手段を提供します。

JSONデータとSQLオブジェクト型のマッピング

この機能は、JSONデータとユーザー定義のSQLオブジェクト型およびコレクションとの間のマッピングを可能にします。SQL/JSONファンクションjson_valueを使用して、JSONデータをSQLオブジェクト型のインスタンスに変換できます。逆に、SQL/JSONファンクションjson_objectまたはjson_arrayを使用すると、SQLオブジェクト型のインスタンスからJSONデータを生成できます。

JSON開発者ガイドのOracle Databaseリリース18cバージョン18.1における変更点

Oracle Databaseリリース18cバージョン18.1でのJSONサポートと『Oracle Database JSON開発者ガイド』の変更点について説明します。

新機能

このリリースの新機能は次のとおりです。

SQL拡張機能

複数のSQLの拡張機能がデータベース内のJSONデータの格納および問合せ用に提供されています。

JSONデータを戻すSQL式が指定可能

キーワードAS JSONとともにSQLファンクションtreatをSQL式に適用して、式がJSONデータを戻すように指定できます。これは、結果がJSONデータであることを判定できない場合に便利です。テキストが強制的にJSONデータとして解釈される必要がある場合にも役立ちます。たとえば、これを使用して、文字列としてではなく、空のJSONオブジェクトとして{}VARCHAR2値を解釈するように指示できます。

JSON_VALUE、JSON_QUERYおよびJSON_TABLEのLOB結果

SQL/JSONファンクションjson_valueは、CLOBインスタンスを戻すことができます。

SQL/JSONファンクションjson_queryは、CLOBまたはBLOBインスタンスを戻すことができます。BLOBの結果はAL32UTF8文字セットです。

前述のように、json_table列のデータ型は、列がFORMAT JSONとして指定されているかどうかによって異なります。指定されている場合はjson_query戻り型がサポートされ、それ以外の場合はjson_value戻り型がサポートされています。

以前のサポート内容は、次のとおりです。:

  • json_valueでは、VARCHAR2NUMBERDATETIMESTAMPTIMESTAMP WITH TIME ZONEおよびSDO_GEOMETRYのみが

    戻り型としてサポートされていました。
  • json_queryでは戻り型としてVARCHAR2のみがサポートされていました。

SQL/JSON生成関数の拡張機能

  • オプションのキーワードSTRICTが追加されました。宣言されている入力、またはJSONデータであることが想定された入力がある場合、整形式のJSONデータかどうかがチェックされて確認されます。これらのいずれかが整形式でない場合、エラーが発生します。

    (キーワードFORMAT JSONを使用するか、キーワードAS JSONともにSQLファンクションtreatを使用して、入力がJSONであることを宣言できます。is json制約を持つ表の列からの入力であるか、入力が別のJSON生成関数の出力である場合、入力はJSONであると想定されます。)

  • SQL/JSON生成関数(json_objectjson_arrayjson_objectaggjson_arrayagg)は、CLOBまたはBLOBインスタンスを戻すことができます。BLOBの結果はAL32UTF8文字セットです。

  • 生成関数への入力式は、次のSQLデータ型(NUMBERVARCHAR2DATETIMESTAMPに加えて)のいずれかにすることができます。

    • BINARY_DOUBLE

    • BINARY_FLOAT

    • CLOB

    • BLOB

    • NVARCHAR2

    • RAW

    • TIMESTAMPWITHTIMEZONE

    • TIMESTAMPWITHLOCALTIMEZONE

    • INTERVALYEARTOMONTH

    • INTERVALDAYTOSECOND

    生成した結果がJSONでどのように表示されるかは、入力のデータ型によって異なります。

SQL/JSONパス式の項目メソッド

  • 次の新規項目メソッドが追加されました: numberOnly()stringOnly()boolean() booleanOnly()size(),およびtype()です。

    名前に"only"が含まれるデータ型の変換メソッドは、"only"が含まれない名前の対応するメソッドと同じです。前者は、特定の型であるJSON値(numberなど)のみを関連のSQLデータ型(NUMBERなど)に変換する点が異なります。名前に"only"が含まれないメソッドは、任意のJSON値を指定したSQLデータ型に変換できます。

  • すべての項目メソッドが、SQL/JSONファンクションjson_valuejson_queryおよびjson_table(列)のパス式で使用できるようになりました。Oracle Database 12cリリース2 (12.2.0.1)では、項目メソッドはSQL/JSON条件json_existsのパス式でのみ使用できました。

  • 項目メソッドstring()は、(VARCHAR2に加えて) CLOBまたはBLOBを戻すことができるようになりました。デフォルトは、VARCHAR2(4000)です。

JSONデータ・ガイドの拡張機能

  • Oracle SQL集計関数json_dataguideは、オプションのフォーマット引数を受け入れます。

    • キーワードFORMATを引数DBMS_JSON.FORMAT_HIERARCHICALとともに指定すると、階層データ・ガイドを返すことができます。

    • キーワードPRETTYを引数DBMS_JSON.PRETTYとともに指定すると、返されたデータ・ガイドの整形出力(読みやすくするためのインデント)を指定できます。

  • 新しいデータ・ディクショナリ・ビューを使用できます。これにより、データ・ガイド対応の検索索引(USER_JSON_DATAGUIDE_FIELDSALL_JSON_DATAGUIDE_FIELDSDBA_JSON_DATAGUIDE_FIELDS)で、個々のJSONオブジェクト・フィールドに記録されたデータ・ガイド情報が表示されます。(これらは、USER_JSON_DATAGUIDESALL_JSON_DATAGUIDESDBA_JSON_DATAGUIDESビューに加えて、データ・ガイド対応の検索索引でJSON列を含む表を示します。)

  • スカラー値の配列が含まれるJSON文書の場合、データ・ガイドはスカラー型とARRAY型を記録します。[*]を配列用に記録されたパスに追加することにより、スカラー値用に記録されたパスは、フラット・データ・ガイドに示されます。

JSON列の存在を記録するデータ・ディクショナリ・ビュー

データ・ディクショナリ・ビューのUSER_JSON_COLUMNSALL_JSON_COLUMNSおよびDBA_JSON_COLUMNSは、JSONデータの列を含むビューおよび表を示します。

関連項目:

ALL_JSON_COLUMNSおよび関連データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください

SQL/JSONファンクションのJSON_TABLE構文

json_tableの構文は、次のようにいくつかの一般的なユースケース用に簡略化することにより、拡張されました。

  • パス式のかわりに単純なドット表記法構文を使用できるようになりました。

  • 列は、JSONオブジェクト・フィールドから投影される場合、および列がフィールドと同じ名前である場合、そのオブジェクトにパス式を指定する必要はありません。パスには列名から推測されます。

JSON_TABLEのマテリアライズド・ビューのON STATEMENTのサポート

json_table問合せを使用してマテリアライズド・ビューを作成するときに、キーワードON STATEMENTを使用できるようになりました。ON COMMITのかわりにON STATEMENTを使用することは、ビューが元表に対してDML文ごとに自動的に同期されることを意味します。

新しいSQLファンクションTO_UTC_TIMESTAMP_TZ

SQLファンクションto_UTC_timestamp_tzは、入力としてISO 8601の日付フォーマット文字列を受け取り、SQLデータ型TIMESTAMP WITH TIMEZONEのインスタンスを戻します。入力はUTC時間(協定世界時、以前はグリニッジ標準時)に正規化されます。SQLファンクションto_timestamp_tzとは異なり、新しいファンクションでは入力文字列がISO 8601日付形式を使用して、タイムゾーンをUTC 0にデフォルト設定すると想定しています。

このファンクションの一般的な使用方法として、SQLファンクションsys_extract_UTCにその出力を提供し、UTC時間を取得してこれをSQLバインド変数としてSQL/JSON条件json_existsに渡し、タイムスタンプ範囲の比較を実行します。

関連項目:

ISO 8601 (ISO日付形式の詳細)

新しいOracle SQL条件JSON_EQUAL

2つのJSON値が等しい場合は、Oracle SQL条件json_equalはこれらを比較してtrueを戻し、それ以外の場合はfalseを戻します。この比較では、無意味な空白および無意味なオブジェクト・メンバーの順序は無視されます。たとえば、JSONオブジェクトに同じメンバーがある場合、その順序に関係なく、これらのオブジェクトは等しくなります。ただし、2つの比較されたオブジェクトのいずれかに1つ以上のフィールドの重複がある場合、json_equalによって戻される値は特定されません。

シャーディングのサポート

JSONデータのシャーディングのサポートが拡張されました。

サポートされている内容は次のとおりです。

  • ユーザー管理かシステム管理かに関係なく、シャーディングされた表のJSON検索索引。

  • SQLとPL/SQLからCLOBまたはBLOBとして戻されるJSONデータ用のクロスシャード(およびシャード内)問合せ。これには、SQL/JSONファンクションjson_tableを使用して、CLOBおよびBLOB列へのJSONデータの投影が含まれています。

  • SQL/JSONファンクションおよび条件を使用する、クロスシャード問合せにおける個別のシャードの評価。これは、次のように使用されます。

    • SELECT句の関数json_valueおよび集計関数json_dataguide

    • FROM句の関数json_table

    • WHERE句の関数json_value、および条件json_existsjson_textcontains

  • チャンク移行中の元表および索引の記憶域表パーティションの自動再配置。

関連項目:

Oracle Shardingの使用

LOB記憶域のパフォーマンスの改善

LOB記憶域を使用するJSONデータに対するパフォーマンスが改善されました。これは特に、LOBとして格納されているJSON文書全体の読取りおよび書込みを行う一般的なユースケースに影響します。

JSON検索索引の長いフィールド名のサポート

JSON検索索引に対してサポートされている最大JSONフィールド名の長さが255バイトになりました(以前は64バイトでした)。

ノート:

名前が64バイトを超えるオブジェクト・フィールドが含まれるJSONデータを索引付けする場合、Oracle Database 18cより前に作成された任意のJSON検索索引およびOracle Text索引を再構築する必要があります。詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。

非推奨となった機能

次の機能は今回のリリースで非推奨となり、今後のリリースではサポートされない可能性があります。

  • 数値(0または1)としてブール型のJSON値を戻すSQL/JSONファンクション。VARCHAR2またはBOOLEANとして(PL/SQLのみ)値を戻しますが、NUMBERとして戻されません。SQL数値が必要な場合は、SQL DECODEまたはCASE WHENを使用してVARCHAR2値から0または1を取得できます。