Решение. Ревью. Замена домена в email
Всем привет!
Постановка: в посте вторника.
Анализ
Сразу скажу, у меня такой код не прошел бы ревью. Объясню причины.
1️⃣ Работа с данными выполняется по одной строке, используя курсор.
fetch c_emailaddress into v_brokernumber, v_emailaddress;
ничего не мешает вычитывать данные пачками, с использованием конструкции limit.
2️⃣ Работая с пачками, для обновления таблицы broker, стоит использовать forall - оператор множественного связывания.
3️⃣ Код не закрывает корректно курсор, в случае возникновения исключений.
Обычно это выполняется через блок обработки ошибок в конце процедуры.
exception
when others then
if c_emailaddress%isopen then
close c_emailaddress;
end if;
raise;
end;
Но это всё так… мелочи.
Главный вопрос - а зачем нам тут курсор и построчная обработка❓
С учетом объема строк (100К), одного обычного update вполне хватит, чтобы решить эту задачу. Обертка в виде процедуры - дело конкретной реализации.
create or replace procedure change_domain(p_olddomainname varchar2
,p_newdomainname varchar2) is
update broker
set email_address = ...
where lower(email_address) like '%@' || lower(p_olddomainname);
end;
/
Код получился очень простой и лаконичный.
В задаче не рассмотрен вопрос оптимизации выполнения запроса.
Простое правило: если вы пишете слово cursor в вашем коде, подумайте хорошенько “надо ли”, может можно сделать все проще 🤷♂️
Хотите научиться писать PL/SQL-код, за который не будет стыдно? Знать когда применять курсоры, а когда нет?
Новый набор на 8-й поток курса “Основы PL/SQL” уже начался. Старт занятий - 13 января 🎓
Палец вверх, если задача понравилась 👍 Обсудить в чатике.
#решениезадачи #cursor
Oracle Developer