9 JSONデータの挿入、更新およびロードの概要
標準データベースAPIを使用して、Oracle DatabaseへのJSONデータの挿入および更新を行えます。ファイルシステムのファイルに含まれるJSONデータをデータベースに公開する外部表を作成することで、このようなデータを直接処理できます。よりよいパフォーマンスのために、外部表のデータを通常の表にロードできます。
JSONデータの挿入または更新での標準データベースAPIの使用
JSONデータは標準のSQLデータ型を使用して格納されるため、VARCHAR2
列とラージ・オブジェクト(LOB)列の挿入または更新に使用されるすべての標準データベースAPIを、JSON文書を格納する列に使用できます。これらのAPIにとって、格納されているJSON文書は文字列にすぎません。
SQL条件is json
をチェック制約として使用して、JSON列に整形式のJSONデータのみを格納するように指定します。データベースでは、このチェック制約を他のチェック制約と同じように扱って、列の内容に関するルールを適用します。このように、データ型がVARCHAR2
、BLOB
または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言語リファレンスを参照してください。