Вопрос № 92783: Здравствуйте!
Получил задание на практику: "Есть база данных с прописками на Oracle 9i, требуется написать хранимую процедуру, которая способна обрабатывать записи- находить дубли (если один и тот же человек был внесен несколько раз) и удал...
Вопрос № 92.783
Здравствуйте!
Получил задание на практику: "Есть база данных с прописками на Oracle 9i, требуется написать хранимую процедуру, которая способна обрабатывать записи- находить дубли (если один и тот же человек был внесен несколько раз) и удалять их, а также, уметь находить записи, в которых допущены ошибки при заполнении (Н/р : требовалось ввести "Иванов Иван Иванович", а внесли "Ивнов Иван Иванович") и как результат - либо исправлять их либо предлагать исправить "
Сам никогда с Oracle не работа, а задание всего на 2 недели. Очень прошу помощи от Экспертов.
С уважением.
Отправлен: 25.06.2007, 06:09
Вопрос задал: KotN (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Malabay
Здравствуйте, KotN!
Если Вы не разу не работали с базами данных(Oracle в частности),то выполнение задание потребует от Вас разобраться хотя бы в общих положениях работы с СУБД.
В этом Вам сможет помочь любой самоучитель по SQL+PLSQL.
Если Вы этого не сделаете, то Вам думаю трудно будет понять, ответы которые Вам дадут здесь или где-то в другом месте (не надо рыбу,дайте удочку).
Давайте по порядку:
Первая часть задания-написание хранимой процедуры поиска дублеров:
Сначала условимся со структурой таблицы:
Таблица -emp
Поля:
emp_id
name
Так как Вы не привели версию СУБД, то пример приведен для Oracle 8 и выше с использованием аналитических функций.
CREATE OR REPLACE PROCEDURE search_dub
IS
CURSOR c1
IS
SELECT * FROM
(SELECT emp_id
,name
,count(*) OVER (partition by name) group_cou
,min(zone_id) OVER (partition by name) cou_id
FROM emp
WHERE name IS NOT NULL)
WHERE group_cou>1
AND cou_id!=emp_id;
r1 c1%ROWCOUNT;
BEGIN
FOR r1 IN c1
LOOP
--В цикле можно например спрашивать, нужно ли удалять или нет например запись
DELETE emp FROM emp_id=r1.emp_id;
END LOOP;
COMMIT;
END search_dub;
Вышеприведенная процедура на PL/SQL находит всех двойников в таблице emp по полю name.
Теперь перейдем ко второй части задания.
Здесь все намного сложнее ,так как Вы не привели способ реализации интерфейса для рабты с базой (web,Delphi,...).
Что считать ошибкой при заполнении? Искусственный интелект пока еще не реализован.Единственный вариант-сравнение со словарем правильных фамилий.
Ответ отправил: Malabay (статус: 1-ый класс)
Ответ отправлен: 25.06.2007, 12:13