Tôi đang sử dụng PL/SQL (Oracle 11g) để cập nhật cột lương bảng EMPLOYEES
.sử dụng câu lệnh FOR UPDATE
Tôi đã sử dụng hai tập lệnh riêng biệt để thực hiện điều tương tự, tức là cập nhật mức lương của nhân viên.
Một tập lệnh sử dụng câu lệnh FOR UPDATE OF
khi tập lệnh khác không sử dụng tập lệnh đó. Trong cả hai trường hợp, tôi thấy rằng oracle giữ các khóa mức hàng cho đến khi chúng ta thực hiện các lệnh ROLLBACK
hoặc COMMIT
.
Vậy sự khác biệt giữa hai tập lệnh là gì?
Loại nào tốt hơn để sử dụng?
Dưới đây là hai kịch bản tôi đang nói về:
-- 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;
tôi thấy rằng Oracle mua lại ổ khóa cấp hàng trên cả hai trường hợp. Vì vậy, lợi ích của việc sử dụng FOR UPDATE OF
là gì và cách nào tốt hơn là viết mã?
Đừng quên: nếu nhân viên == mrp sau đó đặt mức lương + = 100000 – stark