JSON_COMPOSEは、JSON_AGGと同時に使用する場合に最も役立ちます。JSON_AGGは、GROUP BY句によって識別されるグループを提供するように制限されていますが、グループを作成するために使用した値は提供しません。これを取得するには、派生テーブルを生成するsubqueryでJSON_AGGを使用し、JSON_COMPOSE関数へのパラメータの1つとしてJSON_AGGの結果を参照します。グループ化される値が適切なグループに含まれるようにするために、JSON_AGG関数のsubqueryのGROUP BY句で使用される列は、JSON_AGGの結果とともにJSON_COMPOSE関数へのパラメータとして使用する必要があります。これにより、グループ化される値がグループとともに含められます。
ルールと制限
- Vantageの数値データ型は、JSONの数値にマップされます。
- Vantageのnull値はJSONのnullにマップされます。
- Vantageの他のすべてのデータ型は、JSONの文字列にマップされます。
LOB属性を入力として、構造化されたUDTを使用できません。
JSON_COMPOSEは、括弧で囲まれたカンマ区切りリストにある構造化されたUDTのすべての属性の値を書き出します。例: (att1Val、att2Val、...、attNVal)。これを64,000バイトで実行できない場合は、SQLエラーが報告されクエリーは失敗します。
JSON構文に適合するように正しくエスケープされていないエスケープ文字を入力文字データに含めることができます。エスケープされていない文字が関数で検出されると、適切なJSON構文に適合するように入力データがエンコードされます。ただし、エスケープ後も切り捨てられたデータが正しくないJSON構文の結果を返す場合は構文エラーが返されます。
すべてのUDTなど、事前定義型以外のすべての型では、変換された値を使用して、結果として得られるJSON文書を生成します。適切に機能するように、有効なJSON構文のデータを出力する変換を指定する必要があります。そうしないと、JSONインスタンスの妥当性検査に失敗して関数がエラー メッセージを返します。ただし、前述のように、関数はエスケープされていない文字を受け取るので、この場合、エラーは返されません。
JSON値のデータ型は、変換結果の事前定義データ型に基づいて上記のマッピングに従って決定されます。すべての非LOB事前定義型は、特定の列に指定したオプションのFORMAT句、または特定のデータ型のデフォルトの形式(FORMAT句が存在しない場合)に従ってフォーマットされます。
param名は、各パラメータにオプションの"AS"句を使用して指定できます。オプション部分がNULLの場合、結果として得られるJSON文書を構成するパラメータの名前は、Vantageの式の現在の命名ルールに応じて与えられます。