Распарсить таблицу из ячейки pl sql

Подскажите, как распарсить таблицу из ячейки?

На входе ячейка с текстом:

||продукт||цена||
|хлеб|5|
|банан|10|
|итого|15|

Вы выходе должно быть две строки и два столбца. Кол столбцов всегда 2, кол-во строк динамическое.


Ответы (1 шт):

Автор решения: Akina
CREATE TABLE test (value VARCHAR(255))
INSERT INTO test VALUES ('||продукт||цена|| |хлеб|5| |банан|10| |итого|15|');
WITH
cte (fragment, value) AS (
    SELECT TRIM(REGEXP_SUBSTR(value, ' \|[^|]+\|\d+\| ')),
           REPLACE(value, TRIM(REGEXP_SUBSTR(value, ' \|[^|]+\|\d+\| ')), '')
    FROM test
    UNION ALL
    SELECT TRIM(REGEXP_SUBSTR(value, ' \|[^|]+\|\d+\| ')),
           REPLACE(value, TRIM(REGEXP_SUBSTR(value, ' \|[^|]+\|\d+\| ')), '')
    FROM cte
    WHERE REGEXP_SUBSTR(value, ' \|[^|]+\|\d+\| ') IS NOT NULL
)
SELECT REGEXP_REPLACE(fragment, '\|([^|]+)\|\d+\|', '\1') product,
       REGEXP_REPLACE(fragment, '\|[^|]+\|(\d+)\|', '\1') price
FROM cte
PRODUCT PRICE
хлеб 5
банан 10

db<>fiddle here

→ Ссылка