Я в разрядном путанице относительно блокировки обновления, в следующей программеOracle блокировка обновления
CREATE OR REPLACE
PROCEDURE pro_cedure(
p_dept_id NUMBER)
IS
CURSOR mycursor
IS
SELECT deptno,comm,extra
FROM emp
WHERE comm IS NULL
AND extra IS NOT NULL
AND deptno = p_dept_id
FOR UPDATE OF comm;
BEGIN
FOR emp_rec IN mycursor
LOOP
UPDATE emp SET comm = extra
WHERE CURRENT OF mycursor;
INSERT INTO changed
(
deptno,
oldval,
newval,
seq_nextval
)
VALUES
(
emp_rec.deptno,
emp_rec.comm,
emp_rec.extra,
sequence_name.nextval
);
END LOOP;
END;
если другой пользователь попытается обновить ту же таблицу или ту же строку в то время как я обновление делает это вызывает блокировку с эта программа?
SQL-команды, которые записывают данные (обновлять, вставлять, удалять) блокировать места на модифицированных строках. Замки остаются активными до тех пор, пока не будет подтверждено фиксация или откат. Если другой сеанс (пользователь) пытается изменить заблокированную запись, сеанс приостанавливается и должен ждать, пока блокировка не будет удалена другим сеансом. – krokodilko
Вам не нужен курсор для этого, вы можете уменьшить всю процедуру до двух простых операторов. –
да, но мне нужно вставить в измененную таблицу, как старое значение и новое значение в одной процедуре. – user2686661