在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素

Posted

技术标签:

【中文标题】在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素【英文标题】:In Oracle PL/SQL, How do I check if a JSON object contains an element of a specific key在 Oracle PL/SQL 中,如何检查 JSON 对象是否包含特定键的元素 【发布时间】:2021-12-30 20:05:01 【问题描述】:

我有一个如下所示的程序。它接受 JSON 对象作为输入。此对象类型中的元素之一是带有键 samplekey 的数组。在某些情况下,JSON 对象 p_object 不包含 samplekey 数组。在这些情况下,该过程会遇到运行时异常。在 PL/SQL 中处理这种情况的最佳方法是什么?我是否必须首先检查对象p_object 中是否存在带有键samplekey 的元素?如果是,我该怎么做?有没有更好的方法来处理这种情况?

procedure(p_object in json_object_t)
as

lja json_array_t;

begin

lja   := p_object.get_array('samplekey');

end;

【问题讨论】:

视情况而定。当发现该错误时,您希望该过程执行什么操作?如果您希望它被忽略(并且做一些完全不同的事情,不使用该数组),那么您可以在if 语句中检查是否存在。否则,只需在代码的错误处理部分处理错误即可。 【参考方案1】:

您可以使用JSON_OBJECT_THAS 功能。如果 JSON 具有您搜索的密钥,这将返回 TRUEFALSE。下面是一个如何使用它的示例。

DECLARE
    PROCEDURE test_json (p_object IN json_object_t)
    IS
    BEGIN
        IF p_object.has ('samplekey')
        THEN
            DBMS_OUTPUT.put_line ('JSON has the key "samplekey"');
        ELSE
            DBMS_OUTPUT.put_line ('JSON does NOT have the key "samplekey"');
        END IF;
    END;
BEGIN
    test_json (json_object_t (''));
    test_json (json_object_t ('"samplekey":123'));
    test_json (json_object_t ('"otherkey":"test"'));
END;
/

--Output
JSON does NOT have the key "samplekey"
JSON has the key "samplekey"
JSON does NOT have the key "samplekey"

【讨论】:

以上是关于在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 中调试 PL/SQL 集合的值?

检查表是不是重复的过程 - Oracle PL/SQL

如何检查 Oracle PL/SQL 中的参数列表值?

过程检查设置参数(PL/SQL、ORACLE)

用于重复检查的动态 SQL - Oracle PL/SQL

Oracle 11 PL/SQL:检查变量是不是为空、空字符串和无结果