Issue with using special character in JSON_VALUE of Oracle 12c
我正在Oracle 12c上运行以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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; |
运行它时,出现以下错误:
Error report -
ORA-06550: line 17, column 47:
PL/SQL: ORA-40442: JSON path expression syntax error
ORA-06550: line 17, column 1:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\
%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
我期望结果为:
var:55
有没有办法在JSON_VALUE中使用特殊字符?
文档说:
An object step is a period (
. ), sometimes read as"dot", followed by an object key (object property name) or an asterisk (* ) wildcard, which stands for (the values of) all keys. A key must start with an uppercase or lowercase letter A to Z and contain only such letters or decimal digits (0-9), or else it must be enclosed in double quotation marks (" ).
因此,由于您的密钥包含字符
1 | SELECT JSON_VALUE(l_json, '$."value>50".value') INTO l_var FROM dual; |