Oracle Database 18c/19cではJSON関連の新機能が増えています。Oracle 19cで増えたJSON関連関数と構文を使ってみました。非Exadata環境用のオンプレミス版Oracle Database 19cはまだ提供されていないため、LiveSQLを使って検証しています。
JSON_OBJECT関数
指定したデータをJSON型に変換して返す関数です。マニュアルはこちらです。
関数に渡すデータは非常に柔軟に指定できます。Oracle Database 19cでは、行データをすべてJSONに変換するためにJSON_OBJECT関数に'*'を指定できるようになりました。JSONオブジェクトのプロパティは列名がそのまま使われます。
特定の列を指定することもできます。列名の大文字/小文字指定がJSONオブジェクトのプロパティに使われます。下記の図では、first_nameが小文字に、LAST_NAMEが大文字として出力されています。
JSONデータの名前部分に任意の文字列を指定する場合は、 「KEY '名前' VALUE 列名」の形式で記述します。または「'名前' : 列名」の形式で指定することができます。
NESTED COLUMNS構文
JSONデータの中から、特定のプロパティ値のみ取り出す NESTED COLUMNS構文が追加されました。JSON_TABLE関数よりも簡単に使うことができます。マニュアルはこちらです。
データの作成
CREATE TABLE文と、INSERT INTO文でHR.EMPLOYEESテーブルから新しいテーブルを作成します。
NESTED COLUMN構文
NESTED COLUMNS構文で、jsonCol列に格納されたJSONデータからFIRST_NAMEとLAST_NAMEのみを取り出しています。