我从表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中的任何列,即使不是主键的列也可以锁定整个记录?
for update of
从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;