Получить значение от JSON на условной основе - PullRequest
0 голосов
/ 21 июня 2020

как получить значение из указанного атрибута c на основе проверки значения другого значения атрибута в oracle 12 c. Ниже JSON

{
   "Operational_Cost21":[
      {
         "Input1":"20000",
         "Operational_cost23":"Diesel"
      },
      {
         "Input1":"5000",
         "Operational_cost23":"Maintenance"
      },
      {
         "Input1":"20000",
         "Operational_cost23":"Other Variable Cost"
      },
      {
         "Input1":"100000",
         "Operational_cost23":"Driver Salary"
      }
   ]
}

Я хочу получить значение входного значения, где operating_cost23 = 'Зарплата водителя'

ожидаемое значение = 100000

1 Ответ

1 голос
/ 21 июня 2020

Сначала вы должны добавить это ограничение в свою таблицу. CONSTRAINT ensure_json2 CHECK (SAMP IS JSON). Затем вы можете использовать функцию JSON_TABLE.

Документация

DROP TABLE TESTTABLE CASCADE CONSTRAINTS ;

CREATE TABLE TESTTABLE
   (
    SAMP CLOB
    CONSTRAINT ensure_json2 CHECK (SAMP IS JSON));
   
INSERT INTO TESTTABLE
  VALUES (
          '{ "Operational_Cost21": [
    {
      "Input1": "20000",
      "Operational_cost23": "Diesel"
    },
    {
      "Input1": "5000",
      "Operational_cost23": "Maintenance"
    },
    {
      "Input1": "20000",
      "Operational_cost23": "Other Variable Cost"
    },
    {
      "Input1": "100000",
      "Operational_cost23": "Driver Salary"
    }
  ]
}');

SELECT J.Input1,J.Operational_cost23 
       FROM TESTTABLE,
       JSON_TABLE(SAMP,'$.Operational_Cost21[*]' COLUMNS 
       Input1 VARCHAR2(20) PATH '$.Input1',
       Operational_cost23 VARCHAR2(20) PATH '$.Operational_cost23'
       ) J 
where operational_cost23 = 'Driver Salary'
...