从 JSON_TABLE 读取 JSON_VALUE 时出现 ORA-31013

Raf*_*ter 5 sql oracle json

当我使用表达式(而不是表中的表达式)查询JSON_TABLE值时,例如:JSON_VALUECOLUMN

WITH SAMPLE_TABLE AS (
  SELECT '{"a":[{"b":"foo"},{"b":"bar"}]}' AS PAYLOAD FROM DUAL
)
SELECT JSON_VALUE(SUB, '$.b') 
FROM SAMPLE_TABLE, JSON_TABLE(
  PAYLOAD, 
  '$.a[*]' 
  COLUMNS (SUB CLOB FORMAT JSON PATH '$')
);
Run Code Online (Sandbox Code Playgroud)

我收到错误消息,指出我使用了无效的 XPATH 表达式(ORA-31013:无效的 XPATH 表达式)。仅该消息就让我感到困惑,但如果我将 select 更改为JSON_VALUE(TO_CHAR(SUB), '$.b'),查询将通过显示两行foobar来工作,这让我更加困惑。

在 Oracle 中使用 XML 等效项时,我没有遇到任何此类问题,因为此类选择可以正常工作。我没有使用列,因为这使我能够重用 XML 已有的许多内容,除此之外,我很好奇这里出了什么问题。我正在使用Oracle Database 12c 企业版版本 12.2.0.1.0

小智 0

您可以使用 Oracle 19c 中提到的点表示法引用 json 字段吗?希望您使用的是oracle最新版本。

参考: https: //docs.oracle.com/en/database/oracle/oracle-database/19/adjsn/json-in-oracle-database.html#GUID-D7BCE045-EF6D-47E9-9BB2-30C01933248E

例子

SELECT po.po_document.Requestor FROM j_purchaseorder po;
Run Code Online (Sandbox Code Playgroud)

这里j_purchaseorder po是一个表。po_document 是 json 数据库字段 请求者是 json key

你能试试这个吗?