Как использовать формат JSON, чтобы получить значение в Oracle - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь получить значение 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

Спасибо.

1 Ответ

0 голосов
/ 14 декабря 2018

Интересно.Похоже, что этот запрос прекрасно работает в Oracle 18c, но выдает ту же ошибку, когда я тестировал в своей локальной системе ( Oracle 12c Enterprise Edition Release 12.2.0.1.0 ).

LiveSQL Demo

Я не совсем уверен в этом, но, похоже, JSON_value ожидает, что тип данных будет CLOB для извлеченных строк JSON, поэтому ошибка имеет местос JSON_value(lines.x, '$.LineNumber').

Единственный обходной путь, который я мог придумать, - это явное приведение lines.x к CLOB с использованием TO_CLOB, что работало для меня в моей версии 12.2.

JSON_value(TO_CLOB(lines.x), '$.LineNumber')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...