Одним из способов является использование строковых функций.Вот пример подхода с объяснением.
with source_table as (select
'Code identifying test 1
Acceptable values:
00=No code
01=Additional Code' val
from dual)
select substr(val, instr(val, chr(10), 1, 2)+1 ,2) code
,substr(val, instr(val, '=', instr(val,chr(10), 1, 2), 1)+1 , ( instr(val,chr(10), 1, 3) - instr(val,'=', 1, 1) ) ) description
from source_table;
Объяснение
Шаг 1. Создание таблицы с данными: вместо того, чтобы фактически создать временную таблицу и добавить тестовые данные, яподделка создания таблицы с использованием предложения WITH .В этом случае я создал таблицу с именем source_table с одним столбцом val .Он содержит одну строку данных, которая является значением в столбце VAR_DESC из строки 1 вашей исходной таблицы.Вам не нужно делать этот бит, поскольку у вас уже есть таблица с данными в вашей базе данных.
with source_table as (select
'Code identifying test 1
Acceptable values:
00=No code
01=Additional Code' val
from dual)
Теперь для фактического извлечения строки. INSTR определяет положение подстроки в строке. SUBSTR извлекает подстроку из строки.Итак, я попытался определить шаблон в ваших данных.Первая извлекаемая точка данных следует за вторым символом новой строки (chr (10)) .Получив эту позицию, я извлек из этой точки подстроку длины 2.Следующая извлекаемая подстрока начинается после первого = символа и имеет длину, которая была вычислена как отличие позиции 4-го символа новой строки от первого = символ.
Аналогичным образом, если у вас есть несколько строк строк, которые необходимо извлечь в одной строке исходных данных, вам необходимо применить аналогичную логику.
Более простой способсделать это - использовать возможности Oracle PL / SQL и создать функцию (которая внутри строки разбивает строку на части), а затем вызвать функцию в SQL.Код можно сделать намного более читабельным.Вы бы использовали те же строковые функции в PL / SQL.Но вы можете сделать это шаг за шагом, чтобы сделать код проще для тех, кому позже понадобится управлять вашим кодом.