Oracle Databaseでは、JSON_OBJECTAGG()
関数は、キーと値のペアからJSONオブジェクトを作成します。
通常、プロパティキー、プロパティ値、またはその両方はSQL式の列です。
構文
構文は次のようになります:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
場所:
-
[ KEY ] key_expr VALUE val_expr
プロパティのキーと値のペアを指定します。 -
FORMAT JSON
入力文字列がJSONであるため、出力で引用符で囲まれないことを示します。 -
JSON_on_null_clause
expr
のときに使用する動作を指定します nullに相当します(つまり、出力にnull値を含めるか、含めないかのいずれかです)。 -
JSON_returning_clause
戻り値のタイプを指定します。 -
STRICT
JSON生成関数の出力が正しいJSONであるかどうかを確認します。チェックに失敗すると、構文エラーが発生します。 WITH UNIQUE KEYS
生成されたJSONオブジェクトが一意のキーを持つことを保証します。
例
これがどのように機能するかを示す例です:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
結果:
{"score":37}
KEY
一部はオプションであるため、以下でも同じ結果が得られます。
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
結果:
{"score":37}
ネストされたJSON
渡す値の1つにJSONが含まれている場合は、FORMAT JSON
を使用できます。 JSONが含まれていることを指定する引数であり、出力で引用符で囲まないようにする必要があります。
例:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
結果:
{"details":{"name": "Peter", "score": 64}}
FORMAT JSON
を削除するとどうなりますか パート:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
結果:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
データベースの例
JSON_OBJECTAGG()
関数は通常、データベース列の値に基づいてJSONドキュメントを生成するために使用されます。
次のクエリを実行するとします。
SELECT *
FROM jobs
WHERE min_salary > 9000;
結果:
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY __________ ________________________________ _____________ _____________ AD_PRES President 20000 40000 AD_VP Administration Vice President 15000 30000 SA_MAN Sales Manager 10000 20000
JSON_OBJECTAGG()
の使用方法の例を次に示します。 上記の2つの列からJSONドキュメントを生成する関数:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
結果:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
この場合、job_id
列がキーであり、min_salary
列は値です。
この関数の詳細については、Oracleのドキュメントを参照してください。