Обложка канала

Oracle Developer👨🏻‍💻

Все о разработке в СУБД "Oracle" SQL, PL/SQL, оптимизация, архитектура, сертификации и многое другое.

Oracle Developer👨🏻‍💻

4 года назад
Открыть в
Решение. Ревью. Замена домена в 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