Json ha sh сохранить в реляционной базе данных в строках и столбцах - PullRequest
0 голосов
/ 20 июня 2020

Я хочу прочитать значения из json и мне нужно создать новый json, так что есть ли способ мы можем сохранить json в таблице и столбцы в oracle, что поможет выполнить расчет по этому поводу. расчет слишком сложен.

Вот образец json, а json имеет много га sh и

{
  "agri_Expense": {
    "input": 6000,
    "max": 7500,
    "check": 7500
  },
  "income3": {
    "Hiring_income": 239750
  },
  "Operational_Cost1": [
    {
      "Field_input3": 10000,
      "Minimum": "0.05",
      "Check_Input": 26750,
      "Tractor_Cost": "Maintenance"
    }
  ]
}

1 Ответ

0 голосов
/ 20 июня 2020

Вам не нужен PL / SQL, и вы можете сделать это полностью в SQL.

Я хочу прочитать значения из json [...], так что есть любым способом, которым мы можем сохранить json в таблице и столбцах в oracle

Да, используйте SQL для создания таблицы:

CREATE TABLE table_name ( json_column CLOB CHECK ( json_column IS JSON ) )

, а затем INSERT значение там:

INSERT INTO table_name ( json_column ) VALUES (
  '{'
  || '"agri_Expense": {"input": 6000,"max": 7500,"check": 7500},'
  || '"income3": {"Hiring_income": 239750},'
  || '"Operational_Cost1": [{"Field_input3": 10000,"Minimum": "0.05","Check_Input": 26750,"Tractor_Cost": "Maintenance"}]'
  || '}'
)

затем, если вы хотите отдельные значения, SELECT используя JSON_TABLE:

SELECT j.*
FROM   table_name t
       CROSS JOIN JSON_TABLE(
         t.json_column,
         '$'
         COLUMNS (
           agri_expense_input NUMBER PATH '$.agri_Expense.input',
           agri_expense_max   NUMBER PATH '$.agri_Expense.max',
           agri_expense_check   NUMBER PATH '$.agri_Expense.check',
           income3_hiring_income NUMBER PATH '$.income3.Hiring_income',
           NESTED PATH '$.Operational_Cost1[*]'
           COLUMNS (
             oc1_field_input3 NUMBER PATH '$.Field_input3',
             oc1_minimum NUMBER PATH '$.Minimum',
             oc1_check_input NUMBER PATH '$.Check_Input'
           )
         )
       ) j

Что выводит:

AGRI_EXPENSE_INPUT | AGRI_EXPENSE_MAX | AGRI_EXPENSE_CHECK | INCOME3_HIRING_INCOME | OC1_FIELD_INPUT3 | OC1_MINIMUM | OC1_CHECK_INPUT
-----------------: | ---------------: | -----------------: | --------------------: | ---------------: | ----------: | --------------:
              6000 |             7500 |               7500 |                239750 |            10000 |         .05 |           26750

db <> fiddle здесь

...