JSON_QUERY
语法:
json_query(json_data, path_expr [returning_clause] [wrapper_clause] [on_error_clause] [on_empty_clause] )
功能:返回指定路径JSON非标量数据(数组或对象)。
说明:
- json_data:合法的JSON非标量数据(数组或对象);如果为空串''或空值NULL,则该函数返回空值NULL。
- path_expr:路径表达式;如果路径表达式非法,则该函数报错。
- returning_clause:
RETURNING [VARCHAR2[(size)]] | CLOB
- 说明:
该子句描述的返回值信息:
- 未指定该子句时,默认返回VARCHAR2(3900);
- size取值范围为1-32767,未指定size时,默认为3900;
- 返回字符串转义字符会做反转义处理,例如标量字符串"A\"B"则反转义为A"B。
- wrapper_clause
[WITH]|[WITH CONDITIONAL]|[WITH UNCONDITIONAL]|[WITHOUT] [ARRAY] WRAPPER
- 说明:
该子句描述路径表达式匹配到多个JSON数据时(标量或非标量),是否将其封装为数组作为返回值,其中ARRAY关键字可以不用指定,仅仅是为了语义清晰:
- WITH [ARRAY] WRAPPER:将匹配到的1个或多个JSON数据封装为数组;
- WITH UNCONDITIONAL [ARRAY] WRAPPER:同WITH [ARRAY] WRAPPER;
- WITH CONDITIONAL [ARRAY] WRAPPER:当只匹配到一个元素,且是非标量元素,则不做封装成数组操作,其余情况同WITH [ARRAY] WRAPPER;
- WITHOUT [ARRAY] WRAPPER:禁止将匹配到的JSON数据封装为数组,当匹配到多个数据或者匹配到单个标量数据的时候按照on_error子句处理,也是未指定wrapper_clause子句的默认行为。
- on_error_clause:
[ERROR]|[NULL] |[EMPTY] |[EMPTY ARRAY] |[EMPTY OBJECT] ON ERROR
- 说明:
当出现以下错误时:
- json_data为不合法的JSON数据或为JSON标量;
- 路径表达式匹配到标量数据,且处在WITHOUT WRAPPER属性;
- 路径表达式未匹配到数据,且未指定on_empty_clause子句;
- 返回JSON数据超过returning_clause子句指定的大小;
- 路径表达式匹配到多个JSON数据,且处在WITHOUT WRAPPER属性。
该子句返回值行为:
- ERROR ON ERROR:返回错误;
- NULL ON ERROR:返回空值NULL,也是未指定on_error_clause子句的默认行为;
- EMPTY ON ERROR:和EMPTY ARRAY ON ERROR相同;
- EMPTY ARRAY ON ERROR:返回JSON空数组”[]”;
- EMPTY OBJECT ON ERROR:返回JSON空对象”{}”。
- on_empty_clause:
[ERROR]|[NULL] |[EMPTY] |[EMPTY ARRAY] |[EMPTY OBJECT] ON EMPTY
- 说明:该子句描述路径表达式未匹配到JSON数据时,该子句返回值行为:
- ERROR ON EMPTY:返回错误;
- NULL ON EMPTY:返回空值NULL。
- EMPTY ON EMPTY:和EMPTY ARRAY ON EMPTY相同;
- EMPTY ARRAY ON EMPTY:返回JSON空数组”[]”;
- EMPTY OBJECT ON EMPTY:返回JSON空对象”{}”。
未指定该子句时,采用ON ERROR子句行为。
示例:
SQL> select json_query('{"codes":{"suzhou":0,"shanghai":0}}', '$') from SYS_DUMMY; JSON_QUERY('{"CODES":{"SUZHOU":0,"SHANGHAI":0}}', '$') ---------------------------------------------------------------- {"codes":{"suzhou":0,"shanghai":0}} 1 rows fetched. SQL> select json_query('{"codes":{"suzhou":0,"shanghai":0}}', '$.codes') from SYS_DUMMY; JSON_QUERY('{"CODES":{"SUZHOU":0,"SHANGHAI":0}}', '$.CODES') ---------------------------------------------------------------- {"suzhou":0,"shanghai":0} 1 rows fetched. SQL> select json_query('{"A":{"B":[1,[2,[3,{"C":"Hello!"}]]]}}', '$.A.B[1][1][1]' returning varchar2(20)) from SYS_DUMMY; JSON_QUERY('{"A":{"B":[1,[2,[3,{"C":"HELLO!"}]]]}}', '$.A.B[1][1 ---------------------------------------------------------------- {"C":"Hello!"} 1 rows fetched.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论