JSONドット表記法構文またはJSONExtractValue(または、JSONExtractLargeValue)メソッドでSELECT文を使用すると、JSONインスタンスから単一のスカラー値を抽出できます。ただし、JSONドット表記法またはJSONExtractValue(または、JSONExtractLargeValue)メソッドを使用して、複数の値を抽出しようとすると、データベースはデフォルトで警告とエラー メッセージ文字列を返します。
JSONドット表記法を使用して複数のオブジェクト メンバーを抽出しているので、次のクエリーは警告とエラー メッセージ文字列を返します。代わりに返される値のリストが必要な場合は、SET SESSION DOT NOTATION...ON ERROR文またはDBSコントロール フィールドDotNotationOnErrorConditionを使用してこの動作を指定する必要があります。JSONドット表記法で次の構文要素を使用すると、複数の結果が返されることが考えられるので注意してください。
- 再帰下降演算子
- ワイルドカード
- 名前またはインデックス リスト
- スライス
SELECT NEW JSON('{"name":"Al","name":"Betty"}').name;
結果:
*** Query completed. One row found. One column returned. *** Warning: 7548 More than one result per JSON instance found. *** Total elapsed time was 1 second. NEW JSON('{"name":"Al","name":"Betty"}', LATIN).name ----------------------------------------------------------------- *** ERROR MULTI RESULT ***
ドット表記法の代わりにJSONExtractValueを使用する同じ問合わせも、警告とエラー メッセージ文字列を返します。
SELECT NEW JSON('{"name":"Al","name":"Betty"}').JSONExtractValue('$.name');
結果:
*** Query completed. One row found. One column returned. *** Warning: 7548 More than one result per JSON instance found. *** Total elapsed time was 1 second. NEW JSON('{"name":"Al","name":"Betty"}', LATIN).JSONEXTRACTVALUE('$.name') --------------------------------------------------------------------------- *** ERROR MULTI RESULT ***
JSONExtractメソッドを使用して、複数の値を抽出できます。 JSONExtractメソッドを使用した同じ問合わせは成功し、JSON配列の複数の値を返します。
SELECT NEW JSON('{"name":"Al","name":"Betty"}').JSONExtract('$.name');
結果:
*** Query completed. One row found. One column returned. *** Total elapsed time was 1 second. NEW JSON('{"name":"Al","name":"Betty"}', LATIN).JSONEXTRACT('$.name') --------------------------------------------------------------------------- ["Al","Betty"]