テーブル給与列を更新するためにPL/SQL(Oracle 11g)を使用しています。FOR UPDATE文の使用
私は同じことをする、つまり従業員の給与を更新するために2つの別々のスクリプトを使用しました。
1つのスクリプトでは別のスクリプトとして使用していないFOR UPDATE OF
ステートメントを使用しています。どちらの場合も、私はROLLBACK
またはCOMMIT
コマンドを実行するまで、oracleに行レベルのロックが保持されていることがわかりました。
次に、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
を使用する利点は何ですか。そして、どちらがより良いコーディング方法ですか?
従業員== mrpの場合salary + = 100000を設定 – stark