Estoy usando PL/SQL (Oracle 11g) para actualizar la columna del salario de la tabla EMPLOYEES
.uso de la instrucción FOR UPDATE
He usado dos scripts para hacer lo mismo, es decir, actualizar el salario de los empleados.
Una secuencia de comandos usa la instrucción FOR UPDATE OF
mientras que otra secuencia de comandos no la usa. En ambos casos, descubrí que Oracle mantiene los bloqueos de nivel de fila hasta que ejecutamos los comandos ROLLBACK
o COMMIT
.
Entonces, ¿cuál es la diferencia entre dos scripts?
¿Cuál es mejor usar?
Éstos son los dos guiones que estoy hablando:
-- 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;
me encontré con que Oracle adquirió los bloqueos a nivel de fila en ambos casos. Entonces, ¿cuál es el beneficio de usar FOR UPDATE OF
y cuál es la mejor forma de codificación?
No se olvide: si employee == mrp then set salarial + = 100000 – stark