Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.107.96] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Всем здравствуйте!
Помойка - это поле комментариев в таблице объектов БД географических названий. На 95% эти комментарии - комментарии к НАЗВАНИЯМ. Возможен вариант ххххххххххххАбсолютная высота ННННмххххххххххххххх. К самим объектам относятся только сведения об абсолютных высотах. В общем тому, кто такое когда-то придумал, я бы ... Хотелось бы сделать следующее: - добавить double-поле в таблицу объектов(это не проблема); - выбрать в него сами высоты (если они есть); - удалить эту подстроку из поля комментариев, а сами комментарии перенести в таблицу названий (это тоже не проблема); - далее комментарии также разделить на соответствующие поля - доп.источники, ударение, национальная форма (5 вариантов возможно). Можно ли такое сделать исключительно средствами PL/SQL Oracle 12 или проще написать примочку на C++ Билдере? --- Объём помойки ~ 800 000 записей. |
Сообщ.
#2
,
|
|
|
Цитата #SI# @ Можно ли такое сделать исключительно средствами PL/SQL Oracle 12 Можно. В чем проблема? Цитата #SI# @ проще написать примочку на C++ Билдере? Тоже можно. Вопрос как разбирать Цитата #SI# @ доп.источники, ударение, национальная форма (5 вариантов возможно). Разделители "." ";" "," только в приведенном примере а сколько их еще может быть или не быть. Цитата #SI# @ далее комментарии также разделить на соответствующие поля - доп.источники, ударение, национальная форма (5 вариантов возможно). Можно в одну таблицу с признаком от 1 до 5. |
Сообщ.
#3
,
|
|
|
Цитата #SI# @ Можно ли такое сделать исключительно средствами PL/SQL Oracle 12 или проще написать примочку на C++ Билдере? Я бы такую задачу решал бы на Perl'е, благо он именно на работу с текстом и заточен. Основной инструмент - набор регулярок, с помощью которых парсятся необходимые данные. Это наверное самое естественное применение Perl'а. |
Сообщ.
#4
,
|
|
|
Цитата #SI# @ выбрать в него сами высоты (если они есть); INSTR(поле,'Абсолютная высота') вернет позицию с какой вырезать INSTR(поле,'м.',INSTR(pole,'Абсолютная высота ')+LENGTH('Абсолютная высота ')) вернет позицию "м." substr(поле,INSTR(поле,'Абсолютная высота'),INSTR(поле,'м.',INSTR(pole,'Абсолютная высота ')+LENGTH('Абсолютная высота '))+2) даст всю строку |
Сообщ.
#5
,
|
|
|
Цитата Bas @ Отлично! Фишка в том, что новая СУБД до сих пор не узаконена, поэтому пару раз в месяц перезагружаю сервер Oracle 12 данными и запускаю на нём процедуры чистки от лишних полей, лишних пробелов в строках и т.п... Минут 8 работает. Если смогу добавить туда этот "разбор полётов", то будет просто здорово.Можно. Цитата Bas @ Поскольку набивали разные люди в течение 15 лет, то разделители могут быть, а могут и не быть. Человек-то на глаз поймёт... Может не быть разделительного пробела после значения высоты. В общем - возможны варианты.Разделители "." ";" "," только в приведенном примере а сколько их еще может быть или не быть. Цитата JoeUser @ Знаю, что есть такой язык. И это всё, что я о нём знаю . Я бы такую задачу решал бы на Perl'е |
Сообщ.
#6
,
|
|
|
Цитата #SI# @ Может не быть разделительного пробела после значения высоты. В общем - возможны варианты. Это не страшно, плохо когда нет "м." но тогда надо читать только цифры после высоты. Надо писать процедуру разбора строки. |
Сообщ.
#7
,
|
|
|
Цитата Bas @ От этого я никуда не денусь . Надо писать процедуру разбора строки. |
Сообщ.
#8
,
|
|
|
Цитата Bas @ Свет не без добрых людей плохо когда нет "м." но тогда надо читать только цифры после высоты create or replace procedure absHeight(str in varchar2, hei out varchar2) as pos int; hhh varchar2(50) := 'Абсолютная высота'; buf varchar2(1000); dh double precision; begin pos := instr(str, hhh); if pos = 0 then hei := NULL; return; end if; ---------------------------------------------------------- buf := substr(str, pos + length(hhh)); dh := to_number(regexp_replace(buf, '^[^0-9]*(.*[0-9])[^0-9]*$', '\1' )); -- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! hei := buf; end; Перепробовал все варианты возможной строки на входе - схавала всё! Найдено тут - http://www.sql.ru/forum/760998/korrektnoe-...stroki-v-chislo. --- Теперь надо научиться выстригать этот фрагмент из общей строки на входе. Кое-какие мысли есть... |
Сообщ.
#9
,
|
|
|
Пока на коленке, малость корявенько, но надёжно (вроде бы???)
create or replace procedure absHeight(str in varchar2, notes out varchar2) as pos int; hhh varchar2(50) := 'Абсолютная высота'; buf varchar2(1000); dh double precision; hei varchar2(100); lenStr int; lenHei int; head varchar2(1000) := NULL; tail varchar2(1000) := NULL; begin pos := instr(str, hhh); if pos = 0 then hei := NULL; return; end if; ---------------------------------------------------------- lenStr := length(str); buf := substr(str, pos + length(hhh)); dh := to_number(regexp_replace(buf, '^[^0-9]*(.*[0-9])[^0-9]*$', '\1')); hei := concat(hhh, to_number(dh, '99999D9')); lenHei := length(hei); -- может быть хвост строки tail := trim(substr(str, pos + lenHei + 1, lenStr)); -- может быть голова строки if pos > 1 then head := trim(substr(str, 1, pos - 1)); end if; -- в голове хвоста может быть остаток от описания высоты if tail is not null -- запятая и 0 могут остаться от числа с нулём в десятичной части - 1234,0 !!! then tail := ltrim(tail, ',0мm. '); -- вроде ничего другого к значению высоты не должны были приделать end if; ----------------------------------------------------------- if head is not null and tail is not null then notes := concat(head, ' ' || tail); elsif head is not null then notes := head; elsif tail is not null then notes := tail; else notes := NULL; end if; end; Добавлено Принципиально вопрос решён, всем спасибо! |
Сообщ.
#10
,
|
|
|
Реально работающий код.
Процедура отбора объектов с возможными данными об абсолютной высоте: procedure updAbsHeight as cursor cur is select reg_n from gn.geoobject where actual = 1 and code_kind_geoobject in (29, 39, 93, 135, 140, 141, 146, 148, 190, 191, 196, 197, 216, 221, 224); reg_n int; begin open cur; loop fetch cur into reg_n; exit when cur%NOTFOUND; setAbsHeight(reg_n); end loop; close cur; end updAbsHeight; и (сорри за портянку) процедура разделения данных: procedure setAbsHeight(REG_ID in int) as objNotes varchar2(2000); lenNotes int; absHMark varchar2(20) := 'Абсолютная высота'; markPos int; vMin int; buf varchar2(2000); dValue varchar2(10); dblHei number(8, 1); strHei varchar2(50); lenHei int; head varchar2(2000); tail varchar2(2000); comments varchar2(2000); err varchar2(200); begin err := concat('Ошибка в процедуре gn_modify.setAbsHeight REG_N = ', to_char(REG_ID)); --========================================================================= select notes into objNotes from gn.geoobject where reg_n = REG_ID; if objNotes is null then return; end if; --------------------------------------------------------------------------- markPos := instr(objNotes, absHMark); if markPos = 0 then return; end if; --========================================================================= lenNotes := length(objNotes); buf := substr(objNotes, markPos + length(absHMark)); vMin := instr(buf, '.'); -- заменить десятичную точку на запятую if vMin > 0 then buf := regexp_replace(buf, '.', ',', vMin, 1); end if; --------------------------------------------------------------------------- vMin := 0; if instr(buf, ' - ') = 1 or instr(buf, '- ') = 1 then null; else begin vMin := instr(buf, '-'); if vMin > 0 and substr(buf, vMin + 1) between '1' and '9' then vMin := 1; else vMin := 0; end if; end; end if; --------------------------------------------------------------------------- -- в буфере помимо значения высоты могут быть ещё цифры - чей-нибудь год издания етс... или нихрена там нет! dValue := substr(buf, 1, 10); -- фак! 'Абсолютная высота м' !!! if substr(dValue, 1, 1) not between '1' and '9' then dValue := '0'; -- фак-фак-фак! Проверить на пробел внутри цифири!!! 'Абсолютная высота 736, 5 м' !!! -- http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=88473&msg=643244 else dValue := replace(replace(replace(dValue, ' ', chr(0)), chr(0)), chr(0)); end if; -- то, что осталось в подстроке - в число: dblHei := to_number(regexp_replace(dValue/*buf*/, '^[^0-9]*(.*[0-9])[^0-9]*$', '\1')); if vMin = 1 then dblHei := dblHei * -1; end if; strHei := concat(absHMark, ' ' || to_char(dblHei, 'FM99999D9')); -- FM убирает лидирующие пробелы (и нули - если они есть) lenHei := length(strHei); --------------------------------------------------------------------------- -- может быть хвост строки tail := trim(substr(objNotes, markPos + lenHei + 1, lenNotes)); -- может быть голова строки if markPos > 1 then head := trim(substr(objNotes, 1, markPos - 1)); end if; -- в голове хвоста может быть остаток от описания высоты if tail is not null -- запятая и цифры могут остаться от числа с нулём в десятичной части или из-за некорректной позиции дефиса перед значением высоты then tail := ltrim(tail, ',0123456789мm. '); -- вроде ничего другого к значению высоты не должны были приделать end if; --------------------------------------------------------------------------- -- собрать до кучи то, что могло остаться if head is not null and tail is not null then comments := concat(head, ' ' || tail); elsif head is not null then comments := head; elsif tail is not null then comments := tail; else comments := NULL; end if; --------------------------------------------------------------------------- update gn.geoobject set notes = comments, abs_hei = dblHei where reg_n = REG_ID; commit; --========================================================================= exception when others then raise_application_error(-20001, err || chr(13) || chr(10) || SQLERRM); end setAbsHeight; |
Сообщ.
#11
,
|
|
|
Сорри за оффтоп - есть официальное (нормализованное) название объекта. Есть его некий источник - например Указ о переименовании Ленинграда в Санкт-Петербург. И есть информация о том, что такое название есть не только в этом Указе - так называемые Дополнительные источники нормализованного названия. Вместо того, чтобы эту инфу ввести в отдельное поле, она свалена в общее поле примечаний к объекту. А чтобы в отчёте вывелось именно то, что это Дополнительные ... , лабухи, клепавшие базу, сварганили для поля примечаний возможность записи стандартных фраз из самопальных словарей. Вот результат:
procedure set_aux_name_src as begin update gn.geoobject set notes_lmm = replace(notes_lmm, 'Дополнительные источники нормализованного названия', '<NAME>') where instr(notes_lmm, 'Дополнительные источники нормализованного названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'дополнительные источники нормализованного названия', '<NAME>') where instr(notes_lmm, 'дополнительные источники нормализованного названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Дополнительные источники норм. названия', '<NAME>') where instr(notes_lmm, 'Дополнительные источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Дополнительные источники норм.названия', '<NAME>') where instr(notes_lmm, 'Дополнительные источники норм.названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'дополнительные источники норм. названия', '<NAME>') where instr(notes_lmm, 'дополнительные источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'дополнительные источники норм.названия', '<NAME>') where instr(notes_lmm, 'дополнительные источники норм.названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Дополнительные норм.названия', '<NAME>') where instr(notes_lmm, 'Дополнительные норм.названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Дополнительные источники названия', '<NAME>') where instr(notes_lmm, 'Дополнительные источники названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Дополнительные источ', '<NAME>') where instr(notes_lmm, 'Дополнительные источ') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Дополн. источники норм. названия', '<NAME>') where instr(notes_lmm, 'Дополн. источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп источники нормализованного названия', '<NAME>') where instr(notes_lmm, 'Доп источники нормализованного названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм. названий', '<NAME>') where instr(notes_lmm, 'Доп.источники норм. названий') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм. название', '<NAME>') where instr(notes_lmm, 'Доп.источники норм. название') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм.названия', '<NAME>') where instr(notes_lmm, 'Доп. источники норм.названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источника норм.названия', '<NAME>') where instr(notes_lmm, 'Доп.источника норм.названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм.названия', '<NAME>') where instr(notes_lmm, 'Доп.источники норм.названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп источники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники нором. названия', '<NAME>') where instr(notes_lmm, 'Доп. источники нором. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. анзвания', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. анзвания') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. нозвания', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. нозвания') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм. Названия', '<NAME>') where instr(notes_lmm, 'Доп.источники норм. Названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'доп.источники норм названия', '<NAME>') where instr(notes_lmm, 'доп.источники норм названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'доп.источники норм. названия', '<NAME>') where instr(notes_lmm, 'доп.источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники нрм.названия', '<NAME>') where instr(notes_lmm, 'Доп.источники нрм.названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм.', '<NAME>') where instr(notes_lmm, 'Доп.источники норм.') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм.названия;', '<NAME>') where instr(notes_lmm, 'Доп.источники норм.названия;') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источникинорм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источникинорм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. И;сточники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. И;сточники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм. Названия;', '<NAME>') where instr(notes_lmm, 'Доп.источники норм. Названия;') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. Источник;и норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. Источник;и норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. Источники; норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. Источники; норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. Ист. н. н.', '<NAME>') where instr(notes_lmm, 'Доп. Ист. н. н.') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм. названи', '<NAME>') where instr(notes_lmm, 'Доп.источники норм. названи') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. значения', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. значения') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источеики ном. названия', '<NAME>') where instr(notes_lmm, 'Доп.источеики ном. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.Я норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.Я норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники нормал. названия', '<NAME>') where instr(notes_lmm, 'Доп.источники нормал. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.ир норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.ир норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм. ир', '<NAME>') where instr(notes_lmm, 'Доп.источники норм. ир') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники но;1998;звания', '<NAME>') where instr(notes_lmm, 'Доп.источники но;1998;звания') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. Источники норм. yазвания', '<NAME>') where instr(notes_lmm, 'Доп. Источники норм. yазвания') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. yазвания', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. yазвания') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. Источники норм.yазвания', '<NAME>') where instr(notes_lmm, 'Доп. Источники норм.yазвания') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. Источники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. Источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм названия', '<NAME>') where instr(notes_lmm, 'Доп. источники норм названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм.', '<NAME>') where instr(notes_lmm, 'Доп. источники норм.') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм', '<NAME>') where instr(notes_lmm, 'Доп.источники норм') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источ;ики норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источ;ики норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. Ист; очники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. Ист; очники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники нрм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источники нрм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники. названия', '<NAME>') where instr(notes_lmm, 'Доп.источники. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источн;ки норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источн;ки норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источнки норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источнки норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источнии норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источнии норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источник норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источник норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.истоники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.истоники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм названия', '<NAME>') where instr(notes_lmm, 'Доп.источники норм названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. Источники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. Источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. навания', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. навания') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источник норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источник норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.ис; то;m ,чники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.ис; то;m ,чники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. сточники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. сточники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп .источники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп .источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. названиz', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. названиz') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. Названия', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. Названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.иточники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.иточники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источнки норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источнки норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. названи', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. названи') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм. назван', '<NAME>') where instr(notes_lmm, 'Доп. источники норм. назван') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.истоники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.истоники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источни норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источни норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источнки норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источнки норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источнии норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источнии норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'доп. источники норм. названия', '<NAME>') where instr(notes_lmm, 'доп. источники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источнии норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источнии норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.истчники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.истчники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники ро. названия', '<NAME>') where instr(notes_lmm, 'Доп.источники ро. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники нор. названия', '<NAME>') where instr(notes_lmm, 'Доп.источники нор. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источник норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.источник норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. иcточники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп. иcточники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.и сточники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.и сточники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'доп.источники норм. Названия', '<NAME>') where instr(notes_lmm, 'доп.источники норм. Названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'доп.источники норм.названия', '<NAME>') where instr(notes_lmm, 'доп.источники норм.названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.и сточники норм. названия', '<NAME>') where instr(notes_lmm, 'Доп.и сточники норм. названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источник нормативного названия', '<NAME>') where instr(notes_lmm, 'Доп. источник нормативного названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп источники норм названия', '<NAME>') where instr(notes_lmm, 'Доп источники норм названия') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники норм', '<NAME>') where instr(notes_lmm, 'Доп. источники норм') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники норм', '<NAME>') where instr(notes_lmm, 'Доп.источники норм') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.источники', '<NAME>') where instr(notes_lmm, 'Доп.источники') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп. источники', '<NAME>') where instr(notes_lmm, 'Доп. источники') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, 'Доп.ист', '<NAME>') where instr(notes_lmm, 'Доп.ист') > 0; commit; --------------------------------------------------------------------------- -- сразу убрать мусор, могут быть просто пустышки (реально - 2673 строки) update gn.geoobject set notes_lmm = null where instr(notes_lmm, '<NAME>', 1, 1) = instr(notes_lmm, '<NAME>', -1, 1) and instr(notes_lmm, '<NAME>', 1, 1) = (length(notes_lmm) - length('<NAME>') + 1); commit; --------------------------------------------------------------------------- update gn.geoobject set notes_lmm = replace(notes_lmm, '>:', '>') where instr(notes_lmm, '>:') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, '<NAME>**', '<NAME>') where instr(notes_lmm, '<NAME>**') > 0; commit; update gn.geoobject set notes_lmm = replace(notes_lmm, '**<NAME>', '<NAME>') where instr(notes_lmm, '**<NAME>') > 0; commit; end set_aux_name_src; В общем - распахал. Один раз можно. Было даже интересно собрать варианты ! Чисто теоретический вопрос - можно ли в Oracle с его регулярками в PL/SQL сделать это более изящно? |
Сообщ.
#12
,
|
|
|
Цитата #SI# @ Чисто теоретический вопрос Можно lower, upper использовать, пару апдейтом можно сэкономить. Цитата #SI# @ можно ли в Oracle с его регулярками в PL/SQL сделать это более изящно? Это очень уж теоретически, приведение всех "самопальных словарей" (добавить поле которое все эти фразы Цитата Доп.источники ро. названия Доп.источники нор. названия Доп.источник норм. названия Доп. источник норм. названия )привело к единому стандарту, без ручной работы не обойтись, и апдейт уже на основе этих справочников. |
Сообщ.
#13
,
|
|
|
Цитата Bas @ В принципе - можно. Другой вопрос - на сколько производительность упадёт за счёт преобразований регистра? Разовая работа, проверять, честно говоря, просто лень! Можно lower, upper использовать, пару апдейтом можно сэкономить. Цитата Bas @ Эт точно - неделю выборки делал ! Там же кроме Дополнительных источников... есть ещё много чего "стандартного"... без ручной работы не обойтись |
Сообщ.
#14
,
|
|
|
Цитата #SI# @ Разовая работа, проверять, честно говоря, просто лень! Никогда не заморачивался на эту тему, надо у Тома Кейта спросить - должен знать . Цитата #SI# @ Там же кроме Дополнительных источников... есть ещё много чего "стандартного"... Так я о том же, писали знатоки нормальных форм и структурированных блоб(мемо)полей. |
Сообщ.
#15
,
|
|
|
Можно было бы эту "помойку" разобрать через REGEXP_REPLACE (появилась в десятке, кажется), за одно и по тренироваться в применении .
|