19.2 JSON_TABLEとしてのJSON_EXISTS
SQL/JSON条件json_existsは、SQL/JSONファンクションjson_tableの特別な事例であるとみなすことができます。
例19-6に、この対応を示します。2つのSELECT文で得られる結果は同じになります。
この対応は、おそらくjson_existsについてより深く理解する手助けとなるのみでなく、どちらを使用しても同じ結果が得られることを意味しているため、実質的に重要な意味を持ちます。
特に、json_existsを複数回使用する場合、またはこれをjson_valueまたはjson_query (これらもjson_tableを使用して表すことができます)と組み合せて使用して同じデータにアクセスする場合、json_tableを1回呼び出す方が、データが解析されるのが1回のみであるという利点があります。
このため、オプティマイザがjson_exists、json_valueおよびjson_queryの複数の呼出し(任意の組合せ)を、より少ないjson_tableの呼出しに自動的にリライトすることがよく起こります。
ノート:
SQLヒントNO_JSON_TABLE_TRANSFORMを使用すると、json_exists、json_valueおよびjson_queryの複数の呼出し(任意の組合せ)が、より少ない数の、json_tableの呼出しにリライトされなくなります。
例19-6 JSON_TABLEを使用して表されたJSON_EXISTS
SELECT select_list
FROM table WHERE json_exists(column,
json_path error_handler ON ERROR);
SELECT select_list
FROM table,
json_table(column, '$' error_handler ON ERROR
COLUMNS ("COLUMN_ALIAS" NUMBER EXISTS PATH json_path)) AS "JT"
WHERE jt.column_alias = 1;