9 JSONデータの挿入、更新およびロードの概要

標準データベースAPIを使用して、Oracle DatabaseへのJSONデータの挿入および更新を行えます。ファイルシステムのファイルに含まれるJSONデータをデータベースに公開する外部表を作成することで、このようなデータを直接処理できます。よりよいパフォーマンスのために、外部表のデータを通常の表にロードできます。

JSONデータの挿入または更新での標準データベースAPIの使用

JSONデータは標準のSQLデータ型を使用して格納されるため、VARCHAR2列とラージ・オブジェクト(LOB)列の挿入または更新に使用されるすべての標準データベースAPIを、JSON文書を格納する列に使用できます。これらのAPIにとって、格納されているJSON文書は文字列にすぎません。

SQL条件is jsonをチェック制約として使用して、JSON列に整形式のJSONデータのみを格納するように指定します。データベースでは、このチェック制約を他のチェック制約と同じように扱って、列の内容に関するルールを適用します。このように、データ型がVARCHAR2BLOBまたはCLOBのJSON文書が格納された列の処理は、同じ型の他の列と同じように扱われます。

JSON列の文書に更新操作を実行するには、文書全体の置換が必要です。JSON文書に細かい修正を加えることができますが、変更をディスクに保存するためには、更新した文書全体を書き込む必要があります。

アプリケーション開発の観点でみると、これは道理にかなった方法です。JSON文書をアプリケーション状態の記録に使用した場合、通常、アプリケーションは状態を取得および変更し、最後に、更新された状態を反映するためにディスクに書き込みます。文書に対するピース単位の更新を追跡し、それをデータベースに書き込むという複雑な処理をアプリケーションに行わせることは、通常はありません。

JSON文書のJSON列への挿入は、その列のデータ型がVARCHAR2またはCLOBの場合には簡単です—例4-2を参照してください。このような列の更新についても同じです。

しかし、データ型がBLOBのJSON列にデータを挿入したり、そのようなデータを更新したりするために、SQL*Plusなどのコマンドライン・ツールを使用した場合には、JSONデータを適切にバイナリ形式に変換する必要があります例9-1に、部分的な例を示します。表my_tableにはJSON列json_docがあり、この列ではBLOB記憶域が使用されていると仮定します。

例9-1 BLOB列へのJSONデータの挿入

挿入されるテキストのJSONデータ(部分的に省略されたリテラル・データ{...}として表示される)には、データベース・キャラクタ・セット(WE8MSWIN1252)の文字が含まれます。このデータはPL/SQLファンクションUTL_RAW.cast_to_rawに渡されます。ここで、データ型がRAWにキャストされます。この結果は関数UTL_RAW.convertに渡され、ここでキャラクタ・セットAL32UTF8に変換されます。

INSERT INTO my_table (json_doc)
  VALUES (UTL_RAW.convert(UTL_RAW.cast_to_raw('{....}'),
                          'AL32UTF8',
                          'WE8MSWIN1252'));

ファイルシステム・ファイルのJSONデータを処理するための外部表の使用

外部表を使用すると、ファイルシステム内に個別のファイルとして格納されているJSON文書へのアクセスが容易になります。各ファイルは、外部表の行としてOracle Databaseに公開できます。また、外部表は、NoSQLデータベースによって生成されるダンプ・ファイルの内容へのアクセスも提供できます。JSON文書の外部表を使用して、実質的に、ファイルシステム・ファイル内のデータに直接問合せを実行できます。これは、1回の処理ですべてのファイルのデータに対する処理のみが必要な場合に便利です。

ただし、文書の複数の問合せを実行する必要がある場合、特に、それぞれの問合せで外部表の異なる行(異なる文書)からデータを選択する場合には、パフォーマンスを向上させるために、SELECT文としてINSERTを使用して、外部表のデータを通常でのデータベース表にコピーすることを検討します。例10-4を参照してください。JSONデータが通常の表のJSON列にロードされたら、その内容に索引を付け、反復的かつ選択的な方法で、データの問合せを効率的に行うことができるようになります。

注意:

データを挿入、更新およびロードするための通常の方法以外に、Simple Oracle Document Access (SODA) APIも使用できます。SODAは、リレーショナル・データベース機能やSQLおよびPL/SQLなどの言語に関する知識を使用しないスキーマレス・アプリケーション開発向けに設計されています。データベースで文書がどのように格納されているかを把握しなくても、JSONだけでなく、任意の種類の文書コレクションの作成および格納や、それらの文書の取得および問合せの実行を可能にします。SODAには、JSON文書に固有の問合せ機能も用意されています。

SODAの実装には、次の2種類があります。

  • SODA for Java: データベース、コレクションおよび文書を表すJavaクラス。

  • SODA for REST: HTTPコールを実行できる任意の言語を使用した、Representational State Transfer (REST)リクエストとしてのSODA操作。

SODAの詳細は、ドキュメント・ストアとして機能するOracleを参照してください。

関連項目:

SQLファンクションrawtohexの詳細は、Oracle Database SQL言語リファレンスを参照してください。