在PL/SQL中怎么使用JSON数组


这篇文章主要介绍“在PL/SQL中怎么使用JSON数组”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在PL/SQL中怎么使用JSON数组”文章能帮助大家解决问题。就像类一样,对象类型提供了一个预定义的构造函数来实例化该类型的新实例、静态方法和成员方法。以下是您最有可能使用的方法:一般来说,关于在 PL/SQL 中使用 JSON 元素和 JSON 数组,有几点需要记住:默认情况下,如果在为 JSON 数组(或对象)调用成员方法时发生错误,则返回 NULL。换句话说,异常不会引发回您的块。如果您希望错误作为异常从该方法传播,请调用 ON_ERROR 方法并传递一个大于 0 的值。在 PL/SQL 中,您可能知道,嵌套表和变量数组中的索引从 1 开始,而不是 0。使用关联数组,它可以从您想要的任何位置开始。:-)JSON 数组索引从 0 开始,这在许多其他编程语言中很常见,我们在 Oracle 数据库中使用 JSON 数组遵循该约定。所以你不想遍历一个带有循环头的 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-value”}其中 index-value 是关联数组中的字符串索引值,item-value 是数组中该位置的项的值。这是包装规格;请注意,关联数组由定义为 VARCHAR2(50) 的子类型 INDEX_T 索引。这是包体:to_object 函数隐藏了从键和值构造有效 JSON 对象的所有细节。to_array 函数解释如下:接受一个关联数组,返回一个 JSON 数组对象类型实例。由于这是一个字符串索引集合,我不能使用“FOR index IN 1 .. array.COUNT”方法。相反,我从定义的最低索引值开始(在第 13 行通过调用 FIRST 函数检索)并使用 WHILE LOOP。调用 JSON_OBJECT_T append 成员方法以在 JSON 数组的末尾添加一个元素。我要添加什么?使用 to_json.to_object 函数从关联数组索引和项构造的 JSON 对象。找到下一个定义的索引值(记住:字符串!)。NEXT 函数在经过最后一个索引值时返回 NULL,这将停止 WHILE 循环。返回 JSON 数组。是时候运行一些代码了!在下面的块中,我利用了 new-to-18c 限定表达式功能,允许我使用单个表达式初始化字符串索引数组的内容。然后我将它转换为一个 JSON 数组,并显示结果,所有这些都在对 DBMS_OUTPUT.put_line 的单个调用中:结果如下:请注意,JSON 数组中的项目与它们在填充关联数组的限定表达式中出现的顺序不同。这是由于将值放入字符串索引集合时按字符集顺序自动排序。一些 JSON 数组是标量甚至对象的简单列表。但是许多数组中还包含其他数组。使用这些带有嵌套数组的数组,您可能希望遍历该层次结构中的所有“叶子”。最简单的方法是使用递归。让我们建立一个过程来做到这一点。本节中的所有代码都可以在LiveSQL上找到、运行和使用。首先,我将创建一个帮助程序来显示字符串,缩进以显示其在 JSON 数组层次结构中的位置:我的 DBMS_OUTPUT.put_line 版本在 json_array_traversal 过程中的多个地方使用,如下所示。这是该代码的叙述性描述:传入包含 JSON 文档的 CLOB,对于此过程,它应该是一个数组。“叶动作”参数的实际值是遇到叶时要执行的动态 PL/SQL 块。你不太可能在生产代码中使用任何这种通用的东西,但它作为一个实用程序可能非常方便。定义多个 JSON 对象类型的实例:数组、对象、键列表和元素。将文档(文本)解析为分层的内存表示。此时,如果 json_document_in 不是有效数组,则会引发以下错误:ORA-40587: invalid JSON type您可以使用以下块验证这一点:OK,那我就显示传入的文档,利用stringify方法。遍历数组中的每个元素。get_size 方法返回数组中元素的数量。请记住,JSON 数组索引以零 (0) 开头。所以这有效:FOR indx IN 0 .. l_array.get_size – 1但是通过 PL/SQL 嵌套表与迭代一致的公式,例如:FOR indx IN 1 .. l_array.get_size很可能会导致这个错误:ORA-30625: method dispatch on NULL SELF argument is disallowed数组中的元素可以是标量、对象或另一个数组。所以我为每种可能性提供了一个 WHEN 子句。嗯,不是每一个。标量的类型比字符串多,但我将 CASE 语句的扩展留给亲爱的读者,以涵盖所有标量类型。如果元素是标量字符串,那么我使用本机动态 SQL 来执行提供的 PL/SQL 块。我传递给字符串值(通过调用该索引值的 get_string 方法)和级别(以便条目在输出中正确缩进)。对于一个对象,我获取它的所有键,然后对每个键值执行叶子操作。注意:这是我选择为对象执行的操作。在更完整的实现中,您将遍历对象的值,并根据值的类型采取特定操作。例如,一个对象可以在其中包含一个数组,如下所示:{“chicken_noises”:[“click”,”clack”,”cluck”]}最后,如果是数组,我递归调用遍历过程,传递:1.这个元素,转换成数组,然后再转换回字符串格式。2.同叶动作动态块3. 等级,提升1。当我调用遍历过程如下:我看到以下输出:并通过以下调用:我看到这个输出:关于“在PL/SQL中怎么使用JSON数组”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: AmazeUI前端开发中如何解决各种导航式菜单问题

这篇文章主要介绍“AmazeUI前端开发中如何解决各种导航式菜单问题”的相关知识,小编通过实际案例免费云主机域名向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“AmazeUI前端开发中如何解决各种导航式菜单问题”文章能帮助大家解决问题。一、改造Ama…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/10 17:59
Next 09/10 17:59

相关推荐