我正在尝试获取LineNumber的值,但收到错误消息
ORA-31013:无效的XPATH表达式 31013. 00000-“无效的XPATH表达式” *原因:传递给函数的XPATH表达式无效。 *操作:检查xpath表达式中是否存在语法错误。
格式json 似乎不起作用,Oracle认为 lines.x 是json字符串。
select JSON_value(aaa.af1, '$.a.System.Publisher')
, lines.x
, JSON_value(lines.x, '$.LineNumber')
from (
select '{"a":{"System": {"Publisher":"dms_WarehouseExpectedReceipt"},"WarehouseCode":"WHSE1","LineItem":[{"LineNumber":1000,"ItemNumber":"P00001","PackageCode":"*","Lot":"","Gtin":"70000100000015","ExpectedDate":"2018-12-13 12:00:00","InventoryAttributes":{"Character1":"","Character2":"","Character3":""}}]}}' af1 from dual
) aaa
cross apply
json_table(aaa.af1, '$.a.LineItem[*]'
COLUMNS(
queue_child_seq for ordinality
, x format json path '$'
)
) lines
谢谢。
答案 0 :(得分:1)
有趣。该查询似乎在Oracle 18c中工作得很好,但是当我在本地( Oracle 12c Enterprise Edition版本12.2.0.1.0 )中进行测试时,抛出相同的错误。
对此我不太确定,但似乎JSON_value
期望数据类型为提取的JSON字符串的CLOB
,所以错误特别来自JSON_value(lines.x, '$.LineNumber')
。
我能想到的唯一解决方法是使用lines.x
将CLOB
显式转换为TO_CLOB
,这在我的12.2版本中很有效。
JSON_value(TO_CLOB(lines.x), '$.LineNumber')