и посмотреть медиа
Data analysis - DA SQL
и посмотреть медиа
Data analysis: SQL, Python.
Data analysis: SQL, Python.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
About data analysis: databases, SQL, Python and more for analysts.
Циклы в PL/SQL: LOOP, WHILE, FOR Циклы используются для выполнения повторяющихся операций. Полезны, когда данные надо обрабатывать построчно, но работают циклы медленно. 🟠В чем различие между LOOP, WHILE и FOR? ▶️LOOP выполняется бесконечно, пока не будет явно указано условие выхода с помощью EXIT DECLARE counter NUMBER := 1; BEGIN LOOP DBMS_OUTPUT.PUT_LINE('counter: ' || counter); counter := counter + 1; EXIT WHEN counter > 5; END LOOP; END; ▶️WHILE выполняется, пока условие истинно. Если условие ложно с самого начала, цикл не выполнится ни разу DECLARE counter NUMBER := 1; BEGIN WHILE counter 10000 THEN v_bonus := emp_rec.salary * 0.15; ELSIF MONTHS_BETWEEN(SYSDATE, emp_rec.hire_date) > 60 THEN v_bonus := emp_rec.salary * 0.10; ELSE v_bonus := emp_rec.salary * 0.05; END IF; UPDATE employees SET bonus = v_bonus WHERE employee_id = emp_rec.employee_id; END LOOP; COMMIT; END; Для начала, что делает этот скрипт? Он устанавливает размер бонуса к зарплате сотрудника: если зп > 10000, то бонус = 15%; если стаж работы в компании > 5 лет, то бонус = 10%. Для всех остальных случаев бонус = 5%. После этого таблица обновляется. 🟠Почему эта задача решается с помощью цикла, а не обычных операций со множествами? Можно было бы просто написать что-то вроде этого: UPDATE employees SET bonus = CASE WHEN salary > 10000 THEN salary * 0.15 WHEN MONTHS_BETWEEN(SYSDATE, hire_date) > 60 THEN salary * 0.10 ELSE salary * 0.05 END; В целом, можно справиться с ней и обычными множествами. Но теперь усложним задачу. Вернемся к скрипту с циклом. Представим, что вдобавок ко всему написали функцию, которая имеет входные параметры employee_id и v_bonus и которая проверяет на основании этих данных, действительно ли сотруднику положено такое вознаграждение. В случае с циклом вызов этой функции можно было бы прописать после END IF и перед UPDATE. Со множествами уже сложнее. А если подобных функций будет 10? Вот в таких ситуациях циклы могут выручить. 🟠Почему именно цикл FOR, а не LOOP или WHILE? В случае с LOOP надо было бы создавать курсор; задумываться над выходом из цикла, писать разные условия по типу "выходим из цикла, когда в таблице закончились строки". В примере с FOR это всё определяется сразу после BEGIN. С WHILE похожая ситуация: создание курсора, продумывание условий по выходу из цикла.
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!