Задача. Парсинг строк с помощью регулярных выражений.
Операторы ввели в текстовые поля много данных (см. данные ниже в решении). Вычленить из строк все номера счетов и все даты. Если несколько счетов или дат, то собрать их через запятую. Что-то можно и пропустить, т.к. данные вводились без каких-либо шаблонов.
В курсоре z заведены исходные данные. Вывод результата осуществляется в dbms_output. Используются символы табуляции для копирования и просмотра результата в Excel:
declare
v_account_numbers_list varchar2(4000);
v_dates_list varchar2(4000);
v_parced_string varchar2(4000);
v_matched_substring varchar2(4000);
begin
for z in (select 'Сч. №#12345 от 22.01.09 страх. Каско а/м Пепелац с 27.01.09 по 26.01.10' str
from dual
union all
select 'Сч. №234567 от 29.01.09 вода, Выдуманный пер.' str
from dual
union all
select 'Сч. №3456 от 12.01.09 аренда за январь, Чатланск.' str
from dual
union all
select 'Сч. №45678900 от 26.01.09 изготовл. печатей и штампов, Пацаково' str
from dual
union all
select 'Сч. №567 от 26.01.09 изготовл. печатей и штампов, отд. орг-ции раб. Чатланск.сети' str
select 'Сч. №6789 от 26.01.08 изготовл. печатей и штампов, отд. сбора гравицапы' str
from dual
union all
select 'Сч. №7/890123 от 18.02.09 пластилин, Альфа-Центавра' str
from dual
union all
select 'Сч. №890123456 от 31.01.09 комм.услуги (мусор ноябрь-январь, водоснабж. ноябрь-декабрь, газ октябрь-декабрь, землепользование ноябрь-декабрь), Тау-Кита' str
from dual
union all
select 'Сч. №901234 от 28.02.09 услуги охраны за февраль, Плюк' str
from dual
union all
select 'Оплата по дог. №Т-01/2345 от 05.03.09 за аренду с 12.12 по 31.12.08, жёлтые штаны' str
from dual
union all
select 'Оплата по дог. купли-продажи 23/456 а/м от 05.03.09 ку' str
from dual
union all
select 'Реализация а/м кю инв.6441 по дог. 345/678 от 05.03.09' str
from dual
union all
select 'Сч. №4567 от 11.03.09 семинар (малиновые штаны), отд. цветовой дифференциации по штанам' str
from dual
union all
select 'Сч. №56/78901 от 20.02.09 доплата за ремонт принтера, чатлы.' str
from dual
union all
select 'Сл.зап. от 03.03.09 №67-89-01/СЗ госпошлина по иск. заявл. о взыск. с ООО "Скрипач", ООО "Клетка", ООО "Тёплое пальтишко", ООО "Тёплое бельё" задолж. по КД №78/90123 от 13.03.08' str
from dual)
-- цикл по введенным строкам, которые парсятся
loop
-- цикл по поиску номеров счетов
v_account_numbers_list := '';
v_parced_string := z.str;
loop
-- крутим цикл, пока номера счетов удается найти по шаблону в переменную v_matched_substring