использование оператора FOR UPDATE

Я использую 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и какой способ кодирования лучше?

5
задан Ollie 10 August 2012 в 08:51
поделиться