2.3 JSONに対するOracle Databaseのサポート
JavaScript Object Notation (JSON)に対するOracle Databaseのサポートは、リレーショナル記憶域の使用範囲とJSONデータの問合せの使用範囲のベスト・フィットを実現することにより、リレーショナル問合せとJSON問合せを互いに連携して機能させることを目指しています。Oracle SQL/JSONサポートは、SQL標準のJSONサポートと密接に連携しています。
Oracle Databaseは、ECMAScript第5.1版で指定されたJSON形式をサポートしています。
関連項目:
-
ISO/IEC 9075-2:2023, Information technology—Database language SQL—Part 2: Foundation (SQL/Foundation)
-
ISO/IEC TR 19075-6:2021, Information technology — Guidance for the use of database language SQL, Part 6: Support for JSON
-
『Oracle Database SQL言語リファレンス』の「Oracleと標準SQL」
-
ECMAScript言語仕様(JavaScript)の場合は、ECMA 262およびECMA 262第5.1版
- RFC 8259のサポート: JSONスカラー
リリース21c以降のOracle DatabaseではIETF RFC 8259がサポートされており、これにより、JSON文書の最上位レベルに、単なるオブジェクトまたは配列ではなく、JSONスカラー値を含めることができます。このサポートは、JSONデータを返すファンクションはスカラーJSON値を返すこともできることを意味します。
親トピック: Oracle DatabaseのJSON
2.3.1 RFC 8259のサポート: JSONスカラー
リリース21c以降のOracle DatabaseではIETF RFC 8259がサポートされており、これにより、JSON文書の最上位レベルに、単なるオブジェクトまたは配列ではなく、JSONスカラー値を含めることができます。このサポートは、JSONデータを返すファンクションはスカラーJSON値を返すこともできることを意味します。
これをサポートするには、データベース初期化パラメータcompatible
が20
以上である必要があります。
21cより前のデータベース・リリースでは、IETF RFC 4627のみがサポートされていました。これにより、JSON文書の最上位レベルに、スカラーではなくJSONオブジェクトまたは配列のみを含めることができます。RFC 8259のサポートには、RFC 4627のサポート(およびRFC 7159のサポート)が含まれています。
compatible
パラメータが20
以上の場合は、JSONデータの格納方法(JSON
型またはテキスト形式)にかかわらず、デフォルトでRFC 8259がサポートされます。ただし、新しいis json
のキーワードDISALLOW SCALARS
を指定して、特定のJSON列に対してis json
チェック制約を使用すると、最上位レベルのJSONスカラーがある文書の挿入を除外できます(つまり、RFC 8259ではなくRFC 4627のみをサポートします)。
compatible
パラメータが20
以上の場合、SQL/JSONファンクションjson_query
(または、json_query
のセマンティクスを持つjson_table
の列)にキーワードDISALLOW SCALARS
を使用すると、戻り値がJSONオブジェクトまたは配列である必要があることを指定できます。これらのキーワードを指定しない場合は、JSONスカラーを返すことができます。
パラメータcompatible
が20
以上の場合は、SQLデータ型JSON
、そのコンストラクタJSON
およびSQL/JSONファンクションjson_scalar
も使用できます。compatible
が20
より低位にある場合、それらの使用を試みるとエラーが発生します。
compatible
が20
以上の場合は、キーワードDISALLOW SCALARS
を使用することにより、一部のJSONデータで最上位レベルのスカラーが許可されないように制限できます。たとえば、DISALLOW SCALARS
を指定したis json
のチェック制約を使用すると、最上位レベルのスカラーJSON値を持つ文書の挿入を防ぐことができます。
警告:
compatible
パラメータの値を20
以上に変更した場合、後で低い値に戻すことはできません。
親トピック: JSONに対するOracle Databaseのサポート