在 Oracle 12c 的 JSON_VALUE 中使用特殊字符的问题

nik*_*uri 1 sql oracle json plsql oracle12c

我在 Oracle 12c 上运行以下代码:

DECLARE
           l_json clob;
           l_var varchar2(90);
BEGIN
           l_json := '{
                      "value>50": {
                        "id": "file",
                        "value": "55",
                        "popup": {
                          "menuitem": [{
                            "value": "New",
                            "onclick": "CreateNewDoc()"
                          },
                          {
                            "value": "Open",
                            "onclick": "OpenDoc()"
                          },
                          {
                            "value": "Close",
                            "onclick": "CloseDoc()"
                          }]
                        }
                      }
                    }';

    SELECT JSON_VALUE(l_json, '$.value>50.value') INTO l_var FROM dual;
    DBMS_OUTPUT.PUT_LINE('var: '||l_var);
END;
Run Code Online (Sandbox Code Playgroud)

运行它时,我收到以下错误:

错误报告 -
ORA-06550:第 17 行,第 47 列:
PL/SQL:ORA-40442:JSON 路径表达式语法错误
ORA-06550:第 17 行,第 1 列:
PL/SQL:忽略 SQL 语句
06550。00000 - “行 % s,列 %s:\n%s"
*原因:通常是 PL/SQL 编译错误。
*行动:

我期望结果为:
var: 55
有没有办法在 JSON_VALUE 中使用特殊字符?

Ale*_*ole 5

文档说

对象步骤是一个句点 ( .),有时读为“点”,后跟对象键(对象属性名称)或星号 ( *) 通配符,代表所有键(的值)。密钥必须以大写或小写字母 A 到 Z 开头,并且仅包含这些字母或十进制数字 (0-9),否则必须用双引号 ( ) 括起来"

因此,由于您的密钥包含字符>,该字符不是列出的允许字符之一,因此您需要通过将 JSON 路径更改为以下方式来引用它:

SELECT JSON_VALUE(l_json, '$."value>50".value') INTO l_var FROM dual;
Run Code Online (Sandbox Code Playgroud)