Блокировка Oracle с ВЫБОРОМ … FOR UPDATE

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

Кажется, что я должен указать отдельные столбцы, но я хочу, чтобы вся запись нечто была заблокирована. например, Мне бы хотелось сделать что-то как:

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

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

8
задан aw crud 18 June 2010 в 14:28
поделиться

1 ответ

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

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

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;
12
ответ дан 5 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: