『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リリース18cバージョン18.1における変更点
Oracle Databaseリリース18cバージョン18.1でのJSONサポートと『Oracle Database JSON開発者ガイド』の変更点について説明します。 - JSON開発者ガイドのOracle Database12cリリース2 (12.2.0.1)における変更点
Oracle Database 12cリリース2 (12.2.0.1)でのJSONサポートと『Oracle Database JSON開発者ガイド』の変更点について説明します。
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アップグレード・ガイド』を参照してください。
親トピック: 新機能
JSON開発者ガイドのOracle Database12cリリース2 (12.2.0.1)における変更点
Oracle Database 12cリリース2 (12.2.0.1)での、JSONサポートとOracle Database JSON開発者ガイドの変更点について説明します。
- 新機能
このリリースの新機能は次のとおりです。
新機能
このリリースの新機能は次のとおりです。
JSONデータの格納および管理
- JSONデータのパーティション化
JSON仮想列をパーティション化キーとして使用して、表をパーティション化できるようになりました。 - パーティション化された表のJSON検索索引
パーティション化された(レンジ・パーティション化、リスト・パーティション化、ハッシュ・パーティション化またはインターバル・パーティション化を使用)元表に、JSON検索索引を作成できるようになりました。
親トピック: 新機能
パーティション化された表のJSON検索索引
パーティション化された(レンジ・パーティション化、リスト・パーティション化、ハッシュ・パーティション化またはインターバル・パーティション化を使用)元表に、JSON検索索引を作成できるようになりました。
親トピック: JSONデータの格納および管理
JSONデータの問合せ
- パス式の機能拡張
JSONパス式に、データの照合によって満たす必要があるフィルタ式と、データを変換できる変換メソッドを含められるようになりました。 - 単純なドット表記法構文による配列アクセスのサポート
単純なドット表記法構文を使用して、配列とその要素にアクセスできるようになりました。 - データ・ガイド
一連のJSON文書の構造的情報を取得するJSONデータ・ガイドを作成できるようになりました。JSONデータ・ガイドは派生スキーマとして動作し、それが表すJSONデータと一緒に維持されます。また、文書で使用されているスカラー値に関する統計情報の記録も行います。 - PL/SQLに追加されたSQL/JSONファンクションおよび条件
json_value
、json_query
、json_object
およびjson_array
のSQL/JSONファンクションと、json_exists
のSQL/JSON条件が、PL/SQL言語に組込み関数として追加されました(json_exists
はPL/SQLのブール型関数)。 - 追加のデータ型に対するJSON_VALUEおよびJSON_TABLEのサポート
SDO_GEOMETRY
、DATE
、TIMESTAMP
およびTIMESTAMP WITH TIME ZONE
のSQLデータ型を、json_value
およびjson_table
のSQL/JSONファンクションで使用できるようになりました。
親トピック: 新機能
データ・ガイド
一連のJSON文書の構造的情報を取得するJSONデータ・ガイドを作成できるようになりました。JSONデータ・ガイドは派生スキーマとして動作し、それが表すJSONデータと一緒に維持されます。また、文書で使用されているスカラー値に関する統計情報の記録も行います。
関連項目:
親トピック: JSONデータの問合せ
PL/SQLに追加されたSQL/JSONファンクションおよび条件
json_value
、json_query
、json_object
およびjson_array
のSQL/JSONファンクションと、json_exists
のSQL/JSON条件が、PL/SQL言語に組込み関数として追加されました(json_exists
はPL/SQLのブール型関数)。
関連項目:
親トピック: JSONデータの問合せ
追加のデータ型に対するJSON_VALUEおよびJSON_TABLEのサポート
SDO_GEOMETRY
、DATE
、TIMESTAMP
およびTIMESTAMP WITH TIME ZONE
のSQLデータ型を、json_value
およびjson_table
のSQL/JSONファンクションで使用できるようになりました。
これらのいずれかを、SQL/JSONファンクションjson_value
の戻りデータ型として、また、SQL/JSONファンクションjson_table
の列データ型として指定できます。
SDO_GEOMETRY
は、Oracle Spatial and Graphデータに対して使用します。特に、これらの関数をGeoJSONデータと一緒に使用できることを意味します。GeoJSONデータは、JSONの地理データをエンコードするための形式です。
パフォーマンス
- 検索の機能拡張
JSON検索索引の作成に、よりシンプルな構文を使用できるようになりました。組込みの日時データ型としてキャストできる数値およびJSON文字列に、範囲検索を使用できるようになりました。 - JSON_TABLEにリライトされたSQL/JSON問合せファンクションおよび条件
多くの場合に、オプティマイザが、json_exists
、json_value
およびjson_query
の複数の呼出し(任意の組合せ)を、より少ないjson_table
の呼出しにリライトするようになりました。これにより、json_table
の呼出しごとにデータが1度だけ解析されるため、通常、パフォーマンスが向上します。 - インメモリー列ストアのJSON列
問合せのパフォーマンスを向上させるために、JSON列をインメモリー列ストアに格納できるようになりました。 - JSONデータに対するマテリアライズド・ビュー
VARCHAR2
またはNUMBER
列として投影されたJSONデータに対して、マテリアライズド・ビューを作成できるようになりました。
親トピック: 新機能
検索の機能拡張
JSON検索索引の作成に、よりシンプルな構文を使用できるようになりました。組込みの日時データ型としてキャストできる数値およびJSON文字列に、範囲検索を使用できるようになりました。
関連項目:
親トピック: パフォーマンス
JSON_TABLEにリライトされたSQL/JSON問合せファンクションおよび条件
多くの場合に、オプティマイザが、json_exists
、json_value
およびjson_query
の複数の呼出し(任意の組合せ)を、より少ないjson_table
の呼出しにリライトするようになりました。これにより、json_table
の呼出しごとにデータが1度だけ解析されるため、通常、パフォーマンスが向上します。
親トピック: パフォーマンス
JSONデータに対するマテリアライズド・ビュー
VARCHAR2
またはNUMBER
列として投影されたJSONデータに対して、マテリアライズド・ビューを作成できるようになりました。
SQL/JSONファンクションjson_table
は、特定のJSONデータをVARCHAR2
またはNUMBER
列として投影します。通常、このような列に対してマテリアライズド・ビューを作成することで、問合せのパフォーマンスを向上させることができます。ビューは読取り専用である必要があり、ビューの作成時にFOR UPDATE
句は許可されません。ビューの完全リフレッシュと増分リフレッシュの両方がサポートされます。多くの場合、ビュー列に対して索引を作成することで、問合せのパフォーマンスをさらに向上させることができます。
親トピック: パフォーマンス
その他
- JSONデータ生成のためのSQL/JSONファンクション
SQL/JSONファンクションjson_object
、json_array
、json_objectagg
およびjson_arrayagg
を使用して、JSONデータをプログラム的に構成できるようになりました。 - JSONデータ用のPL/SQL API
PL/SQL APIを使用して、(1)データ・ガイド操作、(2)インメモリー、階層型、プログラム的表現によってバッキングされたJSONオブジェクト型に対するgetおよびset操作を提供できるようになりました。 - シャーディングされた表のJSON列
シャーディングされた表にJSON列を作成し、そのJSONデータを問い合せることができるようになりました。
親トピック: 新機能
JSONデータ生成のためのSQL/JSONファンクション
SQL/JSONファンクションjson_object
、json_array
、json_objectagg
およびjson_arrayagg
を使用して、JSONデータをプログラム的に構成できるようになりました。
関連項目:
親トピック:その他
JSONデータ用のPL/SQL API
PL/SQL APIを使用して、(1)データ・ガイド操作、(2)インメモリー、階層型、プログラム的表現によってバッキングされたJSONオブジェクト型に対するgetおよびset操作を提供できるようになりました。
親トピック:その他
シャーディングされた表のJSON列
シャーディングされた表にJSON列を作成し、そのJSONデータを問い合せることができるようになりました。
JSONデータを格納できるのは、シャーディングされた表内の型VARCHAR2
(32,767バイトまで)、CLOB
またはBLOB
の列です。VARCHAR2
として格納されていないかぎり、複数のシャード間にわたってJSONデータを問い合せることはできません。
親トピック:その他