Oracle 12c с использованием фильтра jsonpath - PullRequest
1 голос
/ 19 сентября 2019

В моей таблице есть столбец json clob address , он выглядит следующим образом:

{
    "BusinessObjectId":1000000246,
    "IsOrgParty":"Y",
    "IsProspectCustomer":"N",
    "PartyAccountList":
    "PartyAddressList":
        [
            {
                "@pk":663821562,
                "@type":"PartyAddress-PartyAddress",
                "AddressId":663821562,
                "AddressStatus":1,
                "AddressType":1,
                "BusinessObjectId":1000000240,
                "IsPrimaryAddress":"Y",
                "Country":"USA",
                "AddressLine1":"ADD2",
            },
            {
                "@pk":663821853,
                "@type":"PartyAddress-PartyAddress",
                "AddressId":663821853,
                "AddressStatus":1,
                "AddressType":1,
                "BusinessObjectId":1000000240,
                "IsPrimaryAddress":"N",
                "Country":"USA",
                "AddressLine1":"ADD1",
            }
        ],

Я хочу выбрать адресную строку 1, где IsPrimaryAddress обозначен как "Y".

Я использовал оба:

select json_value(address,'$.PartyAddressList[?(@.IsPrimaryAddress=="Y")].AddressLine1') as address from T_Address

или

select json_value(address, '$.PartyAddressList[*]?(@.IsPrimaryAddress=="Y").AddressLine1') as address from T_Address

Оба утверждения не были приняты Oracle.Поддерживает ли Oracle выражение фильтра для json?

1 Ответ

0 голосов
/ 19 сентября 2019

Вы не действительный JSON.Я исправил JSON в демонстрационной ссылке ниже.посмотри.что-то вроде этого должно работать.

select * FROM t_address cross join
  JSON_TABLE(address,'$.PartyAddressList[*]'  
  COLUMNS ( 
            AddressLine1     VARCHAR2(20) PATH '$.AddressLine1' ,
            IsPrimaryAddress VARCHAR2(5) PATH '$.IsPrimaryAddress'
          )  
         ) 
addr  WHERE to_char(IsPrimaryAddress)='Y' ;

DEMO

...