诚之和:在PL/SQL中如何使用JSON数组?

Oracle Database 12c 第 2 版基于 12.1 SQL/JSON 特性构建,添加了许多用于操作 PL/SQL 块中的 JSON 数据的内置对象类型(类似于面向对象语言中的类)。

在这篇文章中,我探索了一些通过 JSON_ARRAY_T 类型及其方法提供的面向数组的 JSON 特性。

就像类一样,对象类型提供了一个预定义的构造函数来实例化该类型的新实例、静态方法和成员方法。

以下是您最有可能使用的方法:

一般来说,关于在 PL/SQL 中使用 JSON 元素和 JSON 数组,有几点需要记住:

错误处理行为

默认情况下,如果在为 JSON 数组(或对象)调用成员方法时发生错误,则返回 NULL。换句话说,异常不会引发回您的块。

如果您希望错误作为异常从该方法传播,请调用 ON_ERROR 方法并传递一个大于 0 的值。

数组索引

在 PL/SQL 中,您可能知道,嵌套表和变量数组中的索引从 1 开始,而不是 0。使用关联数组,它可以从您想要的任何位置开始。:-)

JSON 数组索引从 0 开始,这在许多其他编程语言中很常见,我们在 Oracle 数据库中使用 JSON 数组遵循该约定。所以你不想遍历一个带有循环头的 JSON 数组,如下所示:

FOR indx IN 1 .. my_array.get_size()

相反,你应该这样写:

FOR indx IN  0 .. my_array.get_size() - 1

JSON 数组基础

数组是方括号内以逗号分隔的元素列表,如下所示:

 ["SQL", "PL/SQL"] 

JSON 数组的索引从 0 开始,这与 PL/SQL 集合的规范不同(嵌套表和数组从索引值 1 开始)。

所以上面显示的数组的元素定义在索引值 0 和 1,而不是 1 和 2。

数组中元素的顺序很重要,与对象的顺序不同,对象的成员顺序并不重要(类似于关系表)。

JSON 数组可以在其中包含标量、对象和数组。这些都是有效的 JSON 数组:

1. 包含单个标量值的数组

 [1] 

2. 包含三个标量的数组

 [1,2,"three"] 

3. 三个 JSON 对象的数组

 [{"object":1},{"inside":2},{"array":3}] 

4. 包含布尔文字、标量数组和对象的数组

 [true,[1,2,3],{"name":"steven"},] 

构建您自己的阵列

有时数组是提供给你的,你需要去探索(参见下面的递归循环通过数组)。有时您需要根据表或程序中的数据构造一个数组。

JSON_ARRAY_T 类型为 BYOA(“构建您自己的数组”)提供了许多成员过程:

  • APPEND – 在数组末尾追加一个新项目
  • APPEND_NULL – 在数组末尾追加一个新项目
  • PUT - 在数组中的指定位置添加或修改元素
  • PUT_NULL – 将数组中指定位置的元素值设置为 NULL

为了演示 append,我创建了一个“to JSON”包,它将字符串索引关联数组转换为 JSON 数组(它还包含其他“to JSON”函数;用这个 LiveSQL 脚本自己尝试一下)。

返回的 JSON 数组中的每个元素都是表单中的一个 JSON 对象

 {"index-value":"item-val

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_45378258

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值