JSONTABLE関数はJsonPathを使用して表形式の出力を生成します。これは暗黙的にネストされたテーブルであり、直前のFROM Clause項目と相関があるかもしれません。
Usage
JSONTABLE(value, path [, nullLeafOnMissing] COLUMNS <COLUMN>, ... ) AS nameCOLUMN := name (FOR ORDINALITY | (datatype [PATH string]))Parameters
valueは有効なJSONドキュメントを含むCLOBです;nullLeafOnMissingがFALSE(DEFAULT) の場合、欠落しているリーフを評価するパスは例外をスローします。nullLeafOnMissingが TRUE の場合、NULL 値が返されます;パス文字列は有効な
JsonPathでなければなりません。配列値が返された場合、NULLでない各要素が行の生成に使用されます。そうでない場合は、単一の行を作成するために単一の非NULL項目が使用されます;FOR ORDINALITYカラムはintegerとして型付けされ、その値として1ベースのアイテム番号を返します;各非順位の列は、型を指定し、オプションで
PATHを指定します;PATHが指定されない場合、パスはカラム名から生成されます:@['name'] -は名前に一致するオブジェクトキー値を探します。PATHが指定された場合、@で始まらなければなりません。これは、パスが現在の行コンテキスト項目からの相対パスで処理されることを意味します。
Syntax Rules
カラム名に重複があってはなりません;
配列タイプは現在サポートされていません。
Examples
パッシングを使用すると、1行[1]を返します:
SELECT * FROM JSONTABLE('{"a": {"id":1}}}', '$.a' COLUMNS id integer) xネストされたテーブルとして:
SELECT x.* FROM t, JSONTABLE(t.doc, '$.x.y' COLUMNS first string, second FOR ORDINALITY) xもっと複雑な経路で:
SELECT x.* FROM JSONTABLE('[{"firstName": "John", "lastName": "Wayne", "children": []}, {"firstName": "John", "lastName": "Adams", "children":["Sue","Bob"]}]', '$.*' COLUMNS familyName string path '@.lastName', children integer path '@.children.length()' ) xDifferences from XMLTABLE
JSONから表形式の結果へのOF処理は、XMLTABLEとJSONTOXMLを使用することで以前から推奨されていました。ほとんどのタスクでは、JSONTABLE、よりシンプルな構文が用意されています。しかし、考慮すべきいくつかの違いがあります:
JSONTABLEXMLTABLEメモリのオーバーヘッドを減らすために、ストリーミング処理をサポートしています;JsonPathはXQueryほど強力ではありません。XQuery/XPathで利用できる関数や操作の中には、JsonPathでは利用できないものがたくさんあります;
JsonPathでは、カラムパスで親を参照することができません。ルートや親階層の一部(XPathでは...)を参照する機能はありません。