JSON

JSONリレーショナル二面性

JSONリレーショナル二面性ビューは、リレーショナル・データに対する完全に更新可能なJSONビューです。データは非常に効率的な正規化された形式でリレーショナル表に格納されますが、JSONドキュメントの形式でアプリケーションからアクセスできます。

二面性ビューは、リレーショナル・モデルまたはドキュメント・モデルを使用してアプリケーションを構築する際に開発者が直面した過去の課題を克服することで、画期的な柔軟性とシンプルさを実現します。

ドキュメントの表示に関する項

JSONスキーマ

JSONスキーマベースの検証は、SQL条件IS JSONおよびPL/SQLユーティリティ関数で使用できます。JSONスキーマは、許可されるプロパティ(フィールド名)と対応する許可されるデータ型、およびそれらがオプションか必須かを指定するJSONドキュメントです。

デフォルトでJSONデータはスキーマレスであり、柔軟性を提供します。ただし、JSONデータに、JSONスキーマ検証を介して実行できる他のオプションおよび柔軟なコンポーネントの他に、特定の必須の固定構造および入力が含まれていることを確認できます。

ドキュメントの表示に関する項

XMLおよびJSON検索索引の機能拡張

Oracle Text XML検索索引構文およびJSON検索索引構文の一貫性が向上しました。さらに、JSONおよびXML検索索引のパフォーマンスが向上しました。

XMLまたはJSON検索索引に同じ構文を使用すると、パフォーマンスが向上し、生産性が向上します。

ドキュメントの表示に関する項

JSON検索索引およびデータ・ガイドの変更

JSON検索索引およびJSONデータ・ガイドは、次のように拡張されています。最初の2つは、デフォルトの動作の変更を表します。

  1. JSON検索索引を作成する場合、デフォルトでデータ・ガイドは作成されません。
  2. デフォルトでは、DBMS_JSONプロシージャcreate_viewget_view_sqlおよびadd_virtual_columnsは名前の競合を解決します。つまり、パラメータresolveNameConflictsのデフォルト値はFALSEではなくTRUEです。  つまり、この結果のフィールド名が、同じデータ・ガイド内にすでにある場合、新しい順序番号が末尾に付加された固有の名前が付けられます。
  3. 関数json_dataguideは、フラグ・オプションDBMS_JSON.detect_datetimeを使用してISO 8601日時文字列値を検出するように拡張されています。

このオプションが存在する場合、OracleでサポートされているISO 8601の日付書式と時間書式の文字列であるフィールド値は、stringではなくtimestampとしてフィールドtypeの値を持つデータ・ガイドで表されます。

デフォルトの変更により、JSONデータ・ガイドの使いやすさとパフォーマンスが向上します。

ドキュメントの表示に関する項

JSONデータ型の比較およびソート

JSONデータ型をWHERE、ORDER BYおよびGROUP BY句で直接使用できるようになりました。

SQL構造にJSONデータ型を幅広く適用できることで、アプリケーション開発が簡素化され、明示的なキャストの必要性がなくなり、アプリケーションのパフォーマンスが向上します。

ドキュメントの表示に関する項

JSON配列に対するDBMS_AQのサポート

JSONデータ型配列は、メッセージの配列を1つの操作として処理する、メッセージを渡すアドバンスト・キューイング(AQ)関数のペイロードとして使用できます。これは、C (Oracle Call Interface)、PL/SQLおよびJava (JDBC)のAQインタフェースに適用されます。

アドバンスト・キューイングでは、JSONデータを直接使用して一括でメッセージを渡すことができます。 データ交換形式としてますます一般的になるJSONを使用すると、この機能により、より柔軟なアプリケーション開発が提供され、開発者の生産性が向上します。

ドキュメントの表示に関する項

JSON生成用のNULLの空の文字列

リレーショナル・データからJSONデータを生成する場合、SQLのNULL入力値はデフォルトでJSONのnull値になります。

Oracle SQLでは、SQLのNULL値を空の文字列値('')と区別できません。つまり、空のSQL文字列入力は、SQL NULLと同じように処理されます。この動作によって、ユーザーが混乱することがあります。

json_objectなどのSQL/JSON生成関数を使用する場合、CLOBVARCHAR2などのSQL文字データ型のNULL入力値に対して、ユーザーは空のJSON文字列("")を作成するように指定できます。関数json_scalarについても同様です。

この機能を使用した場合、空のSQL文字列からJSONの空の文字列("")を生成することは簡単で効率的です。この機能を使用しない場合、ユーザーは複雑なCASE文を使用して同じ操作を行う必要があります。

ドキュメントの表示に関する項

JSON_TRANSFORMの機能拡張

JSON_TRANSFORMは、右側のパス式、ネストされたパスおよび算術演算をサポートするように拡張されています。配列内の要素をソートできるSORT演算子がサポートされています。

JSON_TRANSFORMは、ディスク上の更新、および問合せのSELECT句の一時的な変更の両方について、JSONデータを変更するための主要なSQL演算子です。この機能拡張により、算術計算やネストされた配列に対する操作などの更新機能が向上し、開発者の生産性が向上します。

ドキュメントの表示に関する項

JSONデータ・ガイド・フォーマットFORMAT_SCHEMA

フォーマットFORMAT_SCHEMAは、JSONドキュメントの検証に使用できるデータ・ガイドを生成します。

JSONドキュメントを検証するために使用できるJSONデータ・ガイド・ドキュメントを作成できます。

ドキュメントの表示に関する項

JSONタイプ修飾子

JSON型の列には、JSONオブジェクト、配列およびスカラーを含む任意のJSONを格納できます。ユーザーがJSON型が常にオブジェクトであることを確認する必要がある場合があります。このため、data JSON (object)などのタイプ修飾子を追加しました。

この機能により、ユーザーはJSONの最上位タイプ(オブジェクト、配列、スカラー)を指定できます。

ドキュメントの表示に関する項

外部表のJSONタイプのサポート

外部表には、JSONタイプの列のアクセスおよびダイレクト・ロードがサポートされています。JSONデータ型は、外部表定義で列タイプとしてサポートされています。 改行区切りおよびJSON配列ファイル・オプションがサポートされており、外部表からJSONデータを簡単にインポートできます。

この機能により、JSONタイプの列にデータを簡単にロードできるようになります。

ドキュメントの表示に関する項

JSON-to-Duality Converter

既存のJSONコレクションを入力として設定すると、JSON-To-Dualityコンバータは、正規化されたリレーショナル・スキーマに基づいて、同じドキュメント・コレクションをサポートするJSONリレーショナル二面性ビューのセットを作成します。この作成にはユーザー監視は必要ありませんが、ユーザーはスキーマ推奨をオーバーライドできます。

この機能では、JSON-to-Duality Migratorの一部が提供されます。これは、ドキュメント中心のアプリケーションとそのJSONドキュメントをドキュメント・データベースからOracle Databaseの二面性ビューに移動するためのPL/SQLプロシージャのセットです。

ドキュメントの表示に関する項

JSON-to-Duality Importer

この機能により、JSONコレクションのセットから、JSON-to-Duality Converterを使用して作成されたJSONリレーショナル二面性ビューにアプリケーション・データがインポートされます。

この機能では、JSON-to-Duality Migratorの一部が提供されます。これは、ドキュメント中心のアプリケーションとそのJSONドキュメントをドキュメント・データベースからOracle Databaseの二面性ビューに移動するためのPL/SQLプロシージャのセットです。

ドキュメントの表示に関する項

PL/SQL集計タイプをJSONとの間で変換するJSON/JSON_VALUE

PL/SQL JSONコンストラクタは、対応するPL/SQL集計タイプのインスタンスを受け入れ、集計タイプ・データが移入されたJSONオブジェクトまたは配列タイプを返すように拡張されています。

PL/SQL JSON_VALUE演算子が拡張され、RETURNING句で、演算子が返すインスタンスのタイプを定義するタイプ名を受け入れることができるようになりました。

集計データ型のJSONコンストラクタのサポートにより、PL/SQLアプリケーションとJSONをサポートする言語間のデータ交換が合理化されます。

ドキュメントの表示に関する項

問合せによるJSON_ARRAYコンストラクタ

副問合せは、SQL/JSON関数のJSON_ARRAYの引数として使用して配列要素を定義できます。この機能は、SQL/JSON標準の一部です。 

この機能により、開発者の生産性が向上し、他のSQL/JSON標準準拠ソリューションとの相互運用性が向上します。

ドキュメントの表示に関する項

SQL/JSON実行時動作を制御するJSON_BEHAVIOR初期化パラメータ

初期化パラメータJSON_BEHAVIORを使用すると、データベース・セッション内のSQL/JSON演算子のデフォルトの動作を変更できます。

適用可能なSQL/JSON演算子のセッション中に、デフォルトの戻りデータ型、デフォルトの型互換性およびデフォルトのエラー動作を変更できます。

これにより、一貫性のあるセッション・レベルのJSON処理動作が強制され、個々のSQL文内のデフォルトの動作を明示的にオーバーライドする必要がなくなります。

ドキュメントの表示に関する項

JSON_EXPRESSION_CHECKパラメータ

新しいパラメータJSON_EXPRESSION_CHECKでは、JSON問合せチェックを有効または無効にできます。値は、onおよびoffです。デフォルトはoffです。現時点では、このパラメータはJSONリレーショナル二面性ビューに制限されています。パス式にタイポがある場合など、二面性ビュー上のJSONパス式が基礎となる列と一致しない場合、エラーが発生します。問合せのコンパイル中にエラーが発生します。

これにより、JSONリレーショナル二面性ビューでの作業が簡略化されます。これは、正しくないJSONパス式を実行時にデバッグする必要がなくなり、(エラーが発生して)問合せコンパイル時にフラグが付けられるためです。

ドキュメントの表示に関する項

JSON_TRANSFORM演算子ADD_SETおよびREMOVE_SET

Oracle SQL関数のJSON_TRANSFORM演算子ADD_SETおよびREMOVE_SETは、JSON配列がセットであるかのように動作します。つまり、これらが要素が順序付けされておらず、一意(重複なし)であるかのように扱われます。

  • 演算子ADD_SETは、値がまだ要素でない場合にのみ、値を配列に追加します。
  • 演算子REMOVE_SETは、配列から指定された値のすべての出現を削除します。

アプリケーション・コードは、セットとして使用する配列をより簡潔に更新できます。

ドキュメントの表示に関する項

JSONのSQL関数によって返されるLOBは値ベースにできる

JSONのSQL関数がLOB値を返す場合、RETURNING句ではLOBが値ベースであることを指定できます。デフォルトでは、かわりにLOB参照が返されます。次に例を示します。

JSON_SERIALIZE (data returning CLOB VALUE)

値ベースのLOBは、明示的に解放する必要がないため、より簡単に使用できます。データベースは、値ベースのLOBのライフサイクルを完全に管理し、必要に応じて解放します。

ドキュメントの表示に関する項

新しいJSONデータ・ディクショナリ・ビュー

新しいディクショナリ・ビュー*_JSON_INDEXESおよび*_TABLE_VIRTUAL_COLUMNSが追加されました。

これらの新しいビューは、JSONデータを操作するために作成されたデータベース・オブジェクトに対するより優れたインサイトを提供します。

ドキュメントの表示に関する項

JSON_SERIALIZEのORDERED

SQL関数JSON_SERIALIZEには、キーと値のペアをアルファベット順に並べ替えるオプションのキーワードORDEREDがあります(昇順のみ)。オプションのキーワードPRETTYおよびASCIIと組み合せることができます。

シリアライズの結果の順序付けにより、ツールと人間の両方が値を比較しやすくなります。

ドキュメントの表示に関する項

JSONスキーマを使用した事前チェック可能な制約

無効なデータをデータベースに送信しないように、多くの場合、アプリケーションはデータを事前チェック(検証)できます。PL/SQL関数DBMS_JSON_SCHEMA.describeは、データベースの列レベル・チェック制約により実行される検証と同等の検証を実行するためにアプリケーションで使用できるJSONスキーマを提供し、同等のJSONスキーマのない制約を記録します。

アプリケーションは、静的ディクショナリ・ビューALL_CONSTRAINTSDBA_CONSTRAINTSおよびUSER_CONSTRAINTSを参照して、JSONスキーマで事前チェック可能な列を確認することもできます。

表を作成または変更する場合、キーワードPRECHECKを使用して、データベースの外部で列チェック制約を事前チェックできるかどうかを判断できます。特定のPRECHECK列チェック制約に同等のJSONスキーマが存在しない場合、エラーが発生します。

無効なデータを早期に検出すると、アプリケーションの回復力が向上し、潜在的なシステム・ダウンタイムが短縮されます。すべてのアプリケーションは、特定の列のデータが事前チェック可能かどうか、および可能であればどのJSONスキーマによって検証されるかについて、同じ情報にアクセスできます。

ドキュメントの表示に関する項

JSON_VALUEおよびJSON_QUERYの述語

述語を含むJSONパス式は、JSON_VALUEおよびJSON_QUERYで使用できます。この機能は、SQL/JSON標準の一部です。

JSONデータの問合せにより広くJSONパス式を適用すると、開発者の生産性が向上し、コード開発が簡略化されます。

ドキュメントの表示に関する項

JSON_TEXTCONTAINS()のSCORE補助演算子

この機能を使用すると、SCORE()演算子を使用して、JSON_TEXTCONTAINS()問合せのスコアを返すことができます。

スコアで結果を順序付けすることもできます。

JSON_TEXTCONTAINS関数は、SCORE()関数で使用する新しいパラメータを取得して、開発エクスペリエンスを向上させることができます。

ドキュメントの表示に関する項

SODAの拡張

SODA APIには様々な拡張機能があります:

  • マージおよびパッチ: 新しいSODA操作mergeOneおよびmergeOneAndGet。
  • 埋込みキー: ドキュメントのキーをドキュメント自体に埋め込むことができるようになりました。これは、MongoDB互換のコレクションに使用されます。
  • 動的データ・ガイド: データ・ガイドをその場で計算する操作が、PL/SQLおよびC以外の他のSODA言語に拡張されます。
  • サンプリング操作: サンプリング操作が、PL/SQLおよびC以外の他のSODA言語に拡張されます。
  • フラッシュバック: フラッシュバックを使用する操作が、PL/SQLおよびC以外の他のSODA言語に拡張されます。
  • ヒントおよび監視: ヒントおよびSQL監視が、PL/SQLおよびC以外の他のSODA言語に拡張されます。
  • 実行計画: SQL実行計画の取得が、PL/SQLおよびC以外の他のSODA言語に拡張されます。
  • Data GuardおよびGoldenGate: Oracle Data GuardおよびOracle GoldenGateを使用してSODAコレクションをレプリケートできるようになりました。
  • 索引検出: 特定のSODAコレクションのすべての索引をフェッチできるようになりました。
  • 複数値索引の作成: PL/SQL、CおよびJava用の新しいSODA APIで複数値索引を作成します。

これらの拡張により、SODAの一般的な使いやすさと機能が向上し、開発者の生産性が向上します。

ドキュメントの表示に関する項

JSONテキストのストレージをJSONタイプのストレージに移行するためのツール

新しいPL/SQLプロシージャDBMS_JSON.json_type_convertible_checkは、JSONテキストとして格納された既存のデータをJSONデータ型に移行できるかどうかをチェックします。このチェックが成功した後は、いくつかの代替方法でデータを移行できます。

バイナリJSONデータ型形式を利用すると、JSONデータの処理に最適なパフォーマンスが得られます。既存のデータをバイナリJSON形式に正常に変換できるシンプルで簡単な方法を提供することで、JSONデータに適したストレージ形式を採用できます。

ドキュメントの表示に関する項

JSONリレーショナル二面性ビューのWHERE句

JSONリレーショナル二面性ビューを作成する際、単純なWHERE句を使用して、基礎となる表のJSONデータを生成する行を制限できます。1つのユースケースとして、ドキュメントに識別列の値に応じて異なるデータが含まれる複数の二面性ビューを作成できます。たとえば、同じ基礎となる表を使用して、国コード列が指定された値(たとえば、フランスの場合はFR)を持つ表の行のみを選択するWHERE句を使用して、様々な国のデータのビューを定義できます。国ビューでサポートされているJSONドキュメントには、この要件が反映されており、この要件は更新に適用されます。

ビュー定義にWHERE句を使用すると、二面性ビューでサポートされているJSONドキュメントに含めるデータをきめ細かく制御できます。

ドキュメントの表示に関する項