『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開発者ガイドのOracle Databaseリリース18cバージョン18.1における変更点
Oracle Databaseリリース18cバージョン18.1でのJSONサポートと『Oracle Database JSON開発者ガイド』の変更点について説明します。
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更新操作の柔軟性が向上します。 - GeoJSONデータに対する新しいSQL/JSONファンクションJSON_SERIALIZEおよびJSONデータ・ガイドのサポート
新しいSQLファンクションjson_serialize
を使用して、JSONデータをテキストまたはUTFエンコードされたBLOB
データにシリアライズできます。SQL集計ファンクションjson_dataguide
は、GeoJSON地理データをドキュメント内で検出できるようになりました。これを使用して、このようなデータをSQLデータ型SDO_GEOMETRY
として投影するビューを作成できます。 - 構文の簡素化
SQL/JSONパス式およびファンクションjson_object
によるSQL/JSON生成に対して、構文が簡素化されています。新しいSQL問合せ句NESTED
は、json_table
をLEFT OUTER JOIN
とともに使用する単純な代替手段を提供します。 - JSONデータとSQLオブジェクト型のマッピング
この機能は、JSONデータとユーザー定義のSQLオブジェクト型およびコレクションとの間のマッピングを可能にします。SQL/JSONファンクションjson_value
を使用して、JSONデータをSQLオブジェクト型のインスタンスに変換できます。逆に、SQL/JSONファンクションjson_object
またはjson_array
を使用すると、SQLオブジェクト型のインスタンスから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_table
をLEFT OUTER JOIN
とともに使用する単純な代替手段を提供します。
JSON開発者ガイドのOracle Databaseリリース18cバージョン18.1における変更点
Oracle Databaseリリース18cバージョン18.1でのJSONサポートと『Oracle Database JSON開発者ガイド』の変更点について説明します。
新機能
このリリースの新機能は次のとおりです。
- SQL拡張機能
複数のSQL拡張機能がデータベース内のJSONデータの格納および問合せ用に提供されています。 - シャーディングのサポート
JSONデータ用にシャーディングのサポートが拡張されました。 - LOB記憶域のパフォーマンスの改善
LOB記憶域を使用するJSONデータ用にパフォーマンスが改善されました。これは特に、LOBとして格納されているJSON文書全体の読取りおよび書込みを行う一般的なユースケースに影響します。 - JSON検索索引の長いフィールド名のサポート
JSON検索索引にサポートされる最大JSONフィールド名の長さが255バイトになりました(以前は64バイト)。
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
では、VARCHAR2
、NUMBER
、DATE
、TIMESTAMP
、TIMESTAMP 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_object
、json_array
、json_objectagg
、json_arrayagg
)は、CLOB
またはBLOB
インスタンスを戻すことができます。BLOB
の結果はAL32UTF8文字セットです。 -
生成関数への入力式は、次のSQLデータ型(
NUMBER
、VARCHAR2
、DATE
、TIMESTAMP
に加えて)のいずれかにすることができます。-
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_value
、json_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_FIELDS
、ALL_JSON_DATAGUIDE_FIELDS
、DBA_JSON_DATAGUIDE_FIELDS
)で、個々のJSONオブジェクト・フィールドに記録されたデータ・ガイド情報が表示されます。(これらは、USER_JSON_DATAGUIDES
、ALL_JSON_DATAGUIDES
、DBA_JSON_DATAGUIDES
ビューに加えて、データ・ガイド対応の検索索引でJSON列を含む表を示します。) -
スカラー値の配列が含まれるJSON文書の場合、データ・ガイドはスカラー型と
ARRAY
型を記録します。[*]
を配列用に記録されたパスに追加することにより、スカラー値用に記録されたパスは、フラット・データ・ガイドに示されます。
JSON列の存在を記録するデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビューのUSER_JSON_COLUMNS
、ALL_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_exists
とjson_textcontains
。
-
-
チャンク移行中の元表および索引の記憶域表パーティションの自動再配置。
関連項目:
親トピック: 新機能
LOB記憶域のパフォーマンスの改善
LOB記憶域を使用するJSONデータに対するパフォーマンスが改善されました。これは特に、LOBとして格納されているJSON文書全体の読取りおよび書込みを行う一般的なユースケースに影響します。
親トピック: 新機能
JSON検索索引の長いフィールド名のサポート
JSON検索索引に対してサポートされている最大JSONフィールド名の長さが255バイトになりました(以前は64バイトでした)。
ノート:
名前が64バイトを超えるオブジェクト・フィールドが含まれるJSONデータを索引付けする場合、Oracle Database 18cより前に作成された任意のJSON検索索引およびOracle Text索引を再構築する必要があります。詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。
親トピック: 新機能