oracle 每日一题-12c新功能:json函数

原始出处:
http://www.plsqlchallenge.com/

作者:Darryl Hurley

运行环境:SQLPLUS, SERVEROUTPUT已打开

我执行了如下SQL:

CREATE TABLE plch_json
( always_json    CLOB,
  CONSTRAINT keep_it_real
  CHECK ( always_json IS JSON ) );

INSERT INTO plch_json
VALUES(
'{
   "plch_id"     : "1",
   "plch_desc"   : "One",
   "plch_detail" : {
      "detail1" : "1",
      "detail2" : "2",
      "detail3" : [5,4,3,2,1]
                   },
         }'
);

COMMIT;

哪些选项会返回 1 ?

(A) 
SELECT JSON_VALUE(p.always_json,'$.plch_detail.detail1')
  FROM plch_json p;

(B) 
SELECT JSON_VALUE(p.always_json,'$.plch_detail.detail3[4]')
  FROM plch_json p;

(C) 
SELECT JSON_VALUE(p.always_json,'$.plch_detail.detail3[0]')
  FROM plch_json p;

(D) 
SELECT JSON_VALUE(p.always_json,'$.plch_detail.detail3[5]')
  FROM plch_json p;

(E) 
SELECT JSON_VALUE(p.always_json,'$.plch_detail.detail3[5]'
                  DEFAULT '1' ON ERROR )
  FROM plch_json p;
  
(F)
SELECT JSON_VALUE(p.always_json,'$.plch_detail.detail3[5]'
                  ERROR ON ERROR )

  FROM plch_json p;  


A: 这个查询从plch_detail.detail1元素找出了值1。
B: 这个查询从detail3数组找出了值1。元素从0开始计数,所以它找到了数组中的第五个元素。
C: 这个查询返回5, 这是中detail3数组的第一个位置(即0)得到的。
D: 这个查询返回NULL, 因为detail3数组的位置5没有元素。请记住计数器是从0开始算的。
E: 这个查询找不到位置5的元素,因为它不存在(数组元素计数器是从0开始算的)。于是DEFAULT ON ERROR子句就把“找不到元素”的错误转换为1。注意缺省的 ON ERROR 行为是返回NULL, 如选项D所示。
F: 这个查询找不到位置5的元素,因为它不存在(数组元素计数器是从0开始算的)。于是ERROR ON ERROR子句对“找不到元素”的错误进行了处理,并且转换为这个Oracle错误:

ORA-40462: JSON_VALUE evaluated to no value

注意,缺省的 ON ERROR 行为是返回NULL, 如选项D所示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值