説明
SQLで入力された一連のキー値ペアに対して、JSON_OBJECT()関数はそれをJSON形式のオブジェクトに変換し、入力されたすべてのキー値ペアを含みます。
構文
JSON_OBJECT([KEY]'key_name': value_expr FORMAT JSON,
'key_name' VALUE value_expr
[ABSENT|NULL ON NULL,]
[RETURNING CLOB|BLOB|JSON|VARCHAR2|VARCHAR2[size],]
[STRICT,]
[WITH UNIQUE KEYS]);
構文の説明
JSON_OBJECT()関数の構文は以下のとおりです:
- キー値ペアの入力形式は以下のとおりです:
- 'key_name' : value_expression
- 'key_name' : "value_string"
- 'key_name' VALUE value_expression
- 'key_name' VALUE 'value_string'
- column_name_x
- table_alias*
そのうち最初の4つの形式は、キー値ペアがKEY : VALUEで定義されていることを示します。5番目の形式では、入力には1つの列名のみがあり、その列名がkey_nameであり、列の内容がValueです。6番目の形式はワイルドカード「*」の使用であり、このテーブルのすべての列が入力されていることを意味し、これはこのテーブルのすべての列が5番目の方法で書き直されたものと同じです。
FORMAT JSON:このパラメータによって生成される値がJSONデータであることを宣言するため、出力には引用('"')が含まれません。NULL|ABSENT ON NULL:パラメータ式の計算結果がNULLの場合にのみ有効になります。NULL ON NULLは、JSONのNULL値を指定されたキーの値として使用することを意味します。ABSENT ON NULLは、このパラメータを無視することを意味します。
WITH UNIQUE KEYS:計算結果に重複するKeyを含めないように制限するために使用されます。STRICT:出力結果が合法的なJSON形式のデータであることを検証するために使用されます。RETURNING CLOB|BLOB|JSON|VARCHAR2|VARCHAR2[size]:返される値の型を指定するために使用されます。ここで、VARCHAR2[size]は返される値の長さを制限できます。
例
# 入力パラメータが(a)、(b)の場合
SELECT JSON_OBJECT(
'name' : first_name || ' ' || last_name,
'email' : email,
'phone' : phone_number,
'hire_date' : hire_date
)
FROM employees
WHERE employee_id = 140;
# 入力パラメータが(f)の場合、ワイルドカードを使用する
SELECT JSON_OBJECT(*) FROM employees WHERE employee_id = 140;
---------------------------------------------------------------------
{
"EMPLOYEE_ID":140,
"FIRST_NAME":"Joshua",
"LAST_NAME":"Patel",
"EMAIL":"JPATEL",
"PHONE_NUMBER":"650.121.1834",
"HIRE_DATE":"2006-04-06T00:00:00",
"JOB_ID":"ST_CLERK",
"SALARY":2500,
"COMMISSION_PCT":null,
"MANAGER_ID":123,"DEPARTMENT_ID":50
}
# 入力パラメータが(c)、(d)の場合
SELECT JSON_OBJECT('NAME' VALUE first_name, d.*)
FROM employees e, departments d
WHERE e.department_id = d.department_id AND e.employee_id =140
# FORMAT JSON句を使用する
SELECT JSON_OBJECT ('name' value 'Foo') FROM DUAL;
+-------------------------------+
| JSON_OBJECT('NAME'VALUE'FOO') |
+-------------------------------+
| {"name":"Foo"} |
+-------------------------------+
# ケース(a)、(b)でキーワードKEY VALUEを使用する
SELECT JSON_OBJECT (
KEY 'deptno' VALUE d.department_id,
KEY 'deptname' VALUE d.department_name
) "Department Objects"
FROM departments d
ORDER BY d.department_id;
Department Objects
----------------------------------------
{"deptno":10,"deptname":"Administration"}
{"deptno":20,"deptname":"Marketing"}
{"deptno":30,"deptname":"Purchasing"}
{"deptno":40,"deptname":"Human Resources"}
{"deptno":50,"deptname":"Shipping"}
# 入力パラメータ(1),(2)
SELECT JSON_OBJECT(
'first_name' VALUE first_name,
'last_name' VALUE last_name,
'email' VALUE email,
'hire_date' VALUE hire_date
)
FROM employees
WHERE employee_id = 140;
---------------------------------------------------------------------------
{
"first_name":"Joshua",
"last_name":"Patel",
"email":"JPATEL",
"hire_date":"2006-04-06T00:00:00"
}