В Oracle вы можете использовать рекурсивный запрос с CONNECT BY
и REGEXP_SUBSTR
:
SELECT order_id, TRIM(REGEXP_SUBSTR(ref, '[^|]+', 1, level)) ref
FROM t
CONNECT BY instr(ref, '|', 1, level - 1) > 0
ORDER BY order_id, ref
Демонстрация на DB Fiddle :
WITH t AS (
SELECT 'A' order_id, 'Xz|Yz' ref FROM DUAL
)
SELECT order_id, trim(regexp_substr(ref, '[^|]+', 1, level)) ref
FROM t
CONNECT BY instr(ref, '|', 1, level - 1) > 0
order by order_id, ref
ORDER_ID | REF
:------- | :--
A | Xz
A | Yz