Edited at

JSON 関連の新機能を試す(Oracle Database 19c)

Oracle Database 18c/19cではJSON関連の新機能が増えています。Oracle 19cで増えたJSON関連関数と構文を使ってみました。非Exadata環境用のオンプレミス版Oracle Database 19cはまだ提供されていないため、LiveSQLを使って検証しています。


JSON_OBJECT関数

指定したデータをJSON型に変換して返す関数です。マニュアルはこちらです。

関数に渡すデータは非常に柔軟に指定できます。Oracle Database 19cでは、行データをすべてJSONに変換するためにJSON_OBJECT関数に'*'を指定できるようになりました。JSONオブジェクトのプロパティは列名がそのまま使われます。

json_object(*)

特定の列を指定することもできます。列名の大文字/小文字指定がJSONオブジェクトのプロパティに使われます。下記の図では、first_nameが小文字に、LAST_NAMEが大文字として出力されています。

json_object(first_name, LAST_NAME)

JSONデータの名前部分に任意の文字列を指定する場合は、 「KEY '名前' VALUE 列名」の形式で記述します。または「'名前' : 列名」の形式で指定することができます。

json_object('id' : employee_id)


NESTED COLUMNS構文

JSONデータの中から、特定のプロパティ値のみ取り出す NESTED COLUMNS構文が追加されました。JSON_TABLE関数よりも簡単に使うことができます。マニュアルはこちらです。


データの作成

CREATE TABLE文と、INSERT INTO文でHR.EMPLOYEESテーブルから新しいテーブルを作成します。

create data


NESTED COLUMN構文

NESTED COLUMNS構文で、jsonCol列に格納されたJSONデータからFIRST_NAMEとLAST_NAMEのみを取り出しています。

NESTED COLUMN