Блокировка 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 ответов
при запросе нескольких таблиц, вы можете используйте предложение 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;