PL/SQL (Oracle 11g) を使用してEMPLOYEES
テーブルの給与列を更新しています。
私は 2 つの別々のスクリプトを使用して同じことを行いました。つまり、従業員の給与を更新しました。
あるスクリプトはFOR UPDATE OF
ステートメントを使用し、別のスクリプトはそれを使用しません。ROLLBACK
どちらの場合も、 orCOMMIT
コマンドを実行するまでオラクルが行レベルのロックを保持していることがわかりました。
では、2 つのスクリプトの違いは何でしょうか?
どちらを使用するのが良いですか?
私が話している2つのスクリプトは次のとおりです。
-- 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
ですか?また、コーディングのより良い方法はどれですか?