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
数组是方括号内以逗号分隔的元素列表,如下所示:
["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,我创建了一个“to JSON”包,它将字符串索引关联数组转换为 JSON 数组(它还包含其他“to JSON”函数;用这个 LiveSQL 脚本自己尝试一下)。
返回的 JSON 数组中的每个元素都是表单中的一个 JSON 对象
{"index-value":"item-value"}