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

San*_*ose 0 oracle json plsql

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

procedure(p_object in json_object_t)
as

lja json_array_t;

begin

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

end;
Run Code Online (Sandbox Code Playgroud)

小智 7

您可以使用HAS的功能JSON_OBJECT_T。如果 JSON 具有您搜索的密钥,则将返回TRUEor 。FALSE下面是如何使用它的示例。

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"
Run Code Online (Sandbox Code Playgroud)