Использование значения переменной в json_table - PullRequest
1 голос
/ 24 октября 2019

У меня есть следующий json:

{
    "title": "title",
    "description": "description",
    "references": [{
        "reference_id": 181
    },
{
        "reference_id": 182
    }]
}

Я хочу вставить массив ссылок в таблицу xyz, которая содержит следующие столбцы: buffer_id и reference_id

INSERT INTO xyz (
        buffer_id,
        reference_id
    )
        SELECT
            l_buffer_id,
            reference_id
        FROM
            dual,
            JSON_TABLE ( data, '$.references[*]'
                    COLUMNS (
                        l_buffer_id ,
                        reference_id NUMBER PATH '$.reference_id'
                    )
                );

Здесь, l_buffer_id - это переменная, в которой хранится мое значение. Я попробовал вышеупомянутый метод для вставки данных в XYZ. Однако это не работает. Есть ли способ заставить это работать?

1 Ответ

1 голос
/ 24 октября 2019

Можно использовать такой механизм:

INSERT INTO xyz (
        buffer_id,
        reference_id
    )
WITH tab(data) AS
(
 SELECT '{"title": "title",
    "description": "description",
    "references": [{
        "reference_id": 181
    },
{
        "reference_id": 182
    }]
}' FROM dual
)
SELECT row_number() over (order by reference_id) as l_buffer_id,
       reference_id
  FROM tab,
       json_table(data, '$'
               COLUMNS (NESTED PATH '$."references"[*]'
                   COLUMNS (reference_id NUMBER PATH '$."reference_id"')));  

Демо

...