Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на PL/SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PL/SQL

Выпуск № 16
от 30.06.2007, 06:35

Администратор:Евгений Крюков
В рассылке:Подписчиков: 118, Экспертов: 12
В номере:Вопросов: 1, Ответов: 1


Вопрос № 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное