Я использую PL/SQL (Oracle 11g )для обновления столбца зарплаты в таблице EMPLOYEES
.
Я использовал два отдельных скрипта, чтобы сделать одно и то же, то есть обновить зарплату сотрудников.
Один скрипт использует оператор FOR UPDATE OF
, а другой скрипт его не использует. В обоих случаях я обнаружил, что оракул удерживает блокировки на уровне строк, пока мы не выполним команды ROLLBACK
или COMMIT
.
Тогда в чем разница между двумя сценариями?
Какой лучше использовать?
Вот два скрипта, о которых я говорю:
-- Script 1: Uses FOR UPDATE OF
declare
cursor cur_emp
is
select employee_id,department_id from employees where department_id = 90 for update of salary;
begin
for rec in cur_emp
loop
update Employees
set salary = salary*10
where current of cur_emp;
end loop;
end;
--Script 2: Does the same thing like script 1 but FOR UPDATE OF is not used here
declare
cursor cur_emp
is
select employee_id,department_id from employees where department_id = 90;
begin
for rec in cur_emp
loop
update Employees
set salary = salary*10
where Employee_ID = rec.employee_id;
end loop;
end;
Я обнаружил, что Oracle установила блокировки на уровне строк в обоих случаях. Итак, в чем преимущество использования FOR UPDATE OF
и какой способ кодирования лучше?