Блокировка Oracle с помощью SELECT...для обновления

Я выбираю из таблиц 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

должен ли я перечислять каждый столбец foo в for update of раздел, чтобы заблокировать их все? Или я могу произвольно выбрать любой столбец фу, даже те, которые не являются его первичным ключом, и он будет блокировать всю запись?

1 ответов


С документация 10G PL/SQL:

при запросе нескольких таблиц, вы можете используйте предложение FOR UPDATE для ограничения блокировка строк для определенных таблиц. Строки в таблице заблокированы только если для Обновление предложения ссылается на столбец в этой таблице. Например, следующий запрос блокирует строки в таблица сотрудников, но не в таблица отделов:

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;