Я думаю, что наиболее общее решение:
WITH tbl(str) AS (
SELECT 'ABCDEF||GHJ||WERT' str FROM dual UNION ALL
SELECT 'ABC|DEF||GHJ||WERT' str FROM dual UNION ALL
SELECT 'ABClDEF||GHJ||WERT' str FROM dual
)
SELECT regexp_replace(str, '^.*\|\|(.*)\|\|.*', '\1')
FROM tbl;
Обратите внимание, что это работает, даже если отдельные элементы содержат знаки препинания или одну вертикальную черту, чего нет в других решениях. Здесь - сравнение.
Предположительно, двойная вертикальная полоса используется для максимальной гибкости.