aw *_*rud 8 sql oracle plsql locking
我从桌子FOO和BAR中选择.我想锁定正在返回的FOO记录,但我不想锁定BAR的记录.
cursor c_foobar is
select foo.*, bar.* from
foo, bar
where foo.id = bar.foo_id
for update of <what should I put here?>
Run Code Online (Sandbox Code Playgroud)
看起来我需要指定单独的列,但我希望锁定整个foo记录.我希望我可以这样做:
cursor c_foobar is
select foo.*, bar.* from
foo, bar
where foo.id = bar.foo_id
for update of foo
Run Code Online (Sandbox Code Playgroud)
我是否必须枚举该for update of部分中的每一列foo 才能将它们全部锁定?或者我可以随意选择foo中的任何列,即使那些不是它的主键,它会锁定整个记录吗?
Ton*_*ews 12
查询多个表时,可以使用FOR UPDATE子句将行锁定限制在特定表中.仅当FOR UPDATE OF子句引用该表中的列时,才会锁定表中的行.例如,以下查询锁定employees表中的行,但不锁定departments表中的行:
DECLARE
CURSOR c1 IS SELECT last_name, department_name FROM employees, departments
WHERE employees.department_id = departments.department_id
AND job_id = 'SA_MAN'
FOR UPDATE OF salary;
Run Code Online (Sandbox Code Playgroud)