Загрузка данных


WITH
stop_w AS (
    SELECT REPLACE(REPLACE(q'[ООО,ОАО,ПАО,ЗАО,АО,ОДО,ОСБ,АКБ,КБ,ГУП,ГУПУ,МУП,ФГУП,ФУ,КОРПОРЕЙШН,СОФТ,ИНТЕРНЭШНЛ,МЭП,ХОЗ-ВО,РУФПС,
ПАЛАТА,ОАНО,УЗЕЛ,КОНЦЕРН,ФОНД,БАНК,КОМПАНИЯ,ПРЕДПРИЯТИЕ,ОБЩЕСТВО,СОЮЗ,ВКЛАДЫ,ГРАЖДАН,КОРПОРАЦИЯ,КОРПОРАЦИИ,
ИНСТИТУТ,ПОДРАЗДЕЛЕНИЕ,СЕТИ,ОТД,МЕДИА,КЛУБ,РАЙПО,УСИБ,ОБЩ-ВО,ЕДИНЕНИЕ,СКАНСКА,ОТДЕЛЕНИЕ,ПОСОЛЬСТВО,ПОДВОРЬЕ,
КОНСУЛЬТАЦИЯ,СОВЕТ,ФИЛИАЛ,ЗАВОД,ОБЛПО,ГРУППА,СЧЕТ,РЕДАКЦИЯ,НПФ,ГП,ЧАСТЬ,РПЦ,ПИИ,ЭКСПЕДИЦИЯ,ГОСТИНИЦА,СНГ,
ПАРТИЯ,БЮРО,ЕДИНИЦА,Ф-Л,ТУРИЗМ,УМП,ДОМ,ТОВАРИЩЕСТВО,ФИН,РУПС,МЭИ,ЖСК,ТСЖ,ВДПО,ГМБХ,МИНФИН,МИНИФИН,РОС-Я,АРТЕЛЬ,ТЭЛСИС, ОПХ,ТЕПЛОВЫХ,
СИСТЕМС,СОДЕКСО,З-Д,Ф-Т,ЛИМИТЕД,ГОС,НЕФТЕБАЗА,ВЭИ,КОМБИНАТ,КООПЕРАТИВ,ДИСТАНЦИЯ,ЖИЛЬЕ,ЛИЦО,ЛИЦА,ХОЗЯЙСТВО,АВТОШКОЛА, ФРИДАС,
УЧАСТОК,ШАХТА,ИСТЕРН,ПССП,ОТКРЫТОЕ,ЗАКРЫТОЕ,АКЦИОНЕРНОЕ,ГОРОД,ГОРОДА,ПО,МФ,ДОАО,ГПИНЖ,ПСЖА,ФИО,
УЧРЕЖДЕНИЕ,УЧРЕЖДЕНИЯ,УЧРЕЖДЕНИЙ,ФЕДЕРАЛЬНОЕ,ФЕДЕРАЛЬНОЙ,ФЕДЕРАЛЬНЫЙ,ФЕДЕРАЛЬНАЯ,КАЗЕННОЕ,КАЗЕННЫЙ,КАЗЕННАЯ,
УНИТАРНОЕ,УНИТАРНО,УНИТАРНЫЙ,РЕГИОНАЛЬНОЕ,РЕГИОНАЛЬНЫЙ,РЕГИОНАЛЬНАЯ,КРАЕВОЕ,КРАЕВОЙ,ОБЛАСТНОЕ,ОБЛАСТНОЙ,
МУНИЦИПАЛЬНОЕ,МУНИЦИПАЛЬНЫЙ,ГОСУДАРСТВЕННОЕ,ГОСУДАРСТВЕННЫЙ,БЮДЖЕТНОЕ,БЮДЖЕТНЫЙ,АВТОНОМНОЕ,АВТОНОМНЫЙ,
КУЛЬТУРЫ,КУЛЬТУРА,ЛИПЕЦКОЕ,ЛИПЕЦКИЙ,ЛИПЕЦКАЯ,МОРСКАЯ,МОРСКОЙ,УПРАВЛЕНИЕ,ПЕНСИОННОГО,ПЕНСИОННЫЙ,ПЕНСИОННАЯ,
ПОЧТОВОЙ,ПОЧТОВАЯ,ФГУ,ФГУП,ФГБУ,ДЭП,МЗУ,ЭЛЕКТРОПРИБОР,БРЯНСКОЕ,КАЛУЖСКОЕ,ОТДЕЛЕНИЕ]', CHR(10)), CHR(13)) AS s
    FROM DUAL
),
stop_p AS (
    SELECT REPLACE(REPLACE(q'[НЕВЫЯСНЕ,ПАРТНЕР,ОБЪЕДИ,ОБЪЕД-,АДМИНИСТРА,УПРАВЛЕНИ,ДЕПАРТАМЕНТ,КОМИТЕТ,МИНИСТЕРСТВ,ПОЛИТИЧ,ПРЕДСТАВИТ,
ФЕДЕРАЛЬН,ГОСУДАРСТВЕНН,МЕЖДУНАРОДН,ОРГАНИЗАЦИ,ПРОИЗВОДСТВЕН,ПРОИЗВОД,РАЙОН,ПТИЦЕФАБРИК,ФАБРИК,ЗАКРЫТ,ОТКРЫТ,АКЦИОНЕРН,
МАШИНОСТРО,ГОРОДСК,СЕВЕРН,СЕВЕРО,ЮЖНО-,ЦЕНТР,ФИРМ,ГЛАВН,УПРАВ,ОБЩЕСТ,КОМПАНИ,МУНИЦИПАЛЬН,ДЕТСК,ТЕАТР,ТАНЦ,
ДЕЯТЕЛЬН,ОСУЩЕСТВ,ФЕДЕРАЦ,ПРОФСОЮЗ,ФИНУПР,СТАВРОПОЛЬСК,ЧАСОВЕНСК,БРОННИЦК,СТУПИНС,ОБЛАСТ,ДХООО,ШКОЛ,БОЛЬНИЦ,
ПОЛИКЛИНИК,ТОРГОВ,СТРОИТ,УЧРЕЖД,КАЗЕН,УНИТАР,РЕГИОНАЛЬН,КРАЕВ,БЮДЖЕТН,АВТОНОМН,КУЛЬТУР,ЛИПЕЦК,МОРСК,ПЕНСИОН,
ПОЧТОВ,ЭЛЕКТРОПРИБОР,БРЯНСК,КАЛУЖСК,ОТДЕЛЕНИ]', CHR(10)), CHR(13)) AS s
    FROM DUAL
),
stop AS (
    SELECT /*+ MATERIALIZE */ DISTINCT W, T FROM (
        SELECT TRIM(REGEXP_SUBSTR(s, '[^,]+', 1, LEVEL)) AS W, 'W' AS T
        FROM stop_w CONNECT BY LEVEL <= REGEXP_COUNT(s, ',') + 1
        UNION ALL
        SELECT TRIM(REGEXP_SUBSTR(s, '[^,]+', 1, LEVEL)), 'P'
        FROM stop_p CONNECT BY LEVEL <= REGEXP_COUNT(s, ',') + 1
    )
),
src AS (
    SELECT DISTINCT N FROM (
        SELECT /*+ NO_MERGE */ TRANSLATE(UPPER(NAIMEN), 'ABCEHKMOPTXY.,;', 'АВСЕНКМОРТХУ   ') AS N
        FROM SH.UCH_VSE
        WHERE NAIMEN IS NOT NULL
    )
    WHERE REGEXP_LIKE(N,
        '(ИЧ|ЫЧ|ВНА|ОГЛЫ|ОГЛУ|КЫЗЫ|УГЛИ|УУЛУ)([[:space:]]|$)'
     || '|(^|[[:space:]])[А-ЯЁ][[:space:]]+[А-ЯЁ]([[:space:]]|$)')
),
body AS (
    SELECT REGEXP_REPLACE(
               REGEXP_REPLACE(TRIM(REGEXP_REPLACE(N, '[[:space:]]+', ' ')), '^[^А-ЯЁ0-9]+', ''),
               '^((ЧАСТН[А-ЯЁ]*|ПРЕДПР[А-ЯЁ-]*|ПР-ЛЬ|ПР-К|ИНДИВИД[А-ЯЁ]*|ИП|ЧП|ПБОЮЛ|ФЛ'
            || '|НОТАРИУС[А-ЯЁ]*|АДВОКАТ[А-ЯЁ]*|КПП|[0-9]+|Г [А-ЯЁ-]{4,}|ГОР [А-ЯЁ-]{4,}) )+',
               '') AS BODY
    FROM src
),
f AS (
    SELECT REGEXP_SUBSTR(BODY,
        '^([А-ЯЁ][-А-ЯЁ]{2,} [А-ЯЁ][-А-ЯЁ]+ ([-А-ЯЁ]{2,}(ИЧ|ЫЧ|ВНА|ИЧНА)|[-А-ЯЁ]+ (ОГЛЫ|ОГЛУ|КЫЗЫ|УГЛИ|УУЛУ))'
     || '|[А-ЯЁ][-А-ЯЁ]{2,} [А-ЯЁ] [А-ЯЁ]'
     || '|[А-ЯЁ] [А-ЯЁ] [А-ЯЁ][-А-ЯЁ]{2,})( |$)',
        1, 1, NULL, 1) AS FIO
    FROM body
),
g AS (
    SELECT DISTINCT FIO, REGEXP_SUBSTR(FIO, '[А-ЯЁ][-А-ЯЁ]{2,}') AS SURN
    FROM f
    WHERE FIO IS NOT NULL AND LENGTH(FIO) <= 60
      AND NOT REGEXP_LIKE(FIO,
          '(^| )(БЕЗ|ОБРАЗОВ[А-ЯЁ]*|ЮРИДИЧ[А-ЯЁ]*|ЛИЦ[А-ЯЁ]*|ОБРАЗОВАНИ[А-ЯЁ]*)( |$)')
)
SELECT FIO
FROM g
WHERE NOT EXISTS (
    SELECT 1 FROM stop s
    WHERE (s.T = 'W' AND s.W = g.SURN)
       OR (s.T = 'P' AND g.SURN LIKE s.W || '%')
)
ORDER BY FIO;