13.3 JSON_TRANSFORMの演算子ADD_SET

JSON_TRANSFORMの演算子ADD_SETは、要素を集合に追加する場合と同様に、欠落している値を配列に追加します。

これは、その操作のRHSで指定されている値を、LHSのパス式で対象となっている配列に追加します(ただし、その値がまだその要素の1つではない場合のみ)。つまり、これは、その配列を集合であるかのように扱って、その値が重複して追加されないようにします。

ノート: これは集合操作であるため、操作後のすべての配列要素の順序定義されていません

例13-6 JSON_TRANSFORM: 集合としての配列への要素の追加

このコードでは、要素4を入力配列(集合として扱われる)に追加します。

SELECT json_transform('{"a":[1,2,3]}',
                      ADD_SET '$.a' = 4)

結果:

{"a":[ 1,2,3,4 ]}

例13-7 JSON_TRANSFORM: 集合としての配列への既存要素の追加は失敗

このコードでは、入力配列(集合として扱われる)に要素2を追加しようとしています。その入力配列にはすでに要素2があるため、この操作は失敗します。

SELECT json_transform('{"a":[1,2,3]}',
                      ADD_SET '$.a' = 2)

次のエラーが発生します:

ORA-40766: error in JSON_TRANSFORM execution
JZN-00419: value for ADD already in target set

例13-8 JSON_TRANSFORM: ハンドラIGNORE IF PRESENTを使用して要素が事前に存在していたことによるADD_SETエラーを防ぐ

ここにあるコードは、json_transformのハンドラIGNORE IF PRESENTの使用によって、追加する要素が入力配列にすでに存在する場合はそれを無視するという点を除き、例13-7と同じです。

SELECT json_transform('{"a":[1,2,3]}',
                      ADD_SET '$.a' = 2 IGNORE IF PRESENT)

結果: この配列は変更されません。既存の要素2を追加しようとすると無視されます。

{"a":[ 1,2,3,4 ]}

演算子ADD_SETで使用できるハンドラは次のとおりです:

  • ERROR ON MISSING (デフォルト)、IGNORE ON MISSINGCREATE ON MISSING。作成は、対象となる場所に単一の配列を挿入することを意味します。単一の配列要素は、SQLの結果式の値です。

  • NULL ON NULL (デフォルト)、IGNORE ON NULLERROR ON NULL

  • ERROR ON EMPTY (デフォルト)、IGNORE ON EMPTYNULL ON EMPTY

  • IGNORE IF PRESENT