小编典典

Oracle通过SELECT或UPDATE OF锁定

sql

我从表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?>

似乎我需要指定单个列,但是我想锁定foo的整个记录​​。例如,我希望我可以做类似的事情:

cursor c_foobar is
select foo.*, bar.* from
foo, bar
where foo.id = bar.foo_id
for update of foo

我是否必须枚举该for update of节中foo的每一列才能将它们全部锁定?还是我可以随意选择foo中的任何列,即使不是主键的列也可以锁定整个记录?


阅读 203

收藏
2021-03-17

共1个答案

小编典典

10G PL /
SQL文档中

查询多个表时,可以使用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;
2021-03-17