2013-10-13 3 views
0

Я в разрядном путанице относительно блокировки обновления, в следующей программе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; 

если другой пользователь попытается обновить ту же таблицу или ту же строку в то время как я обновление делает это вызывает блокировку с эта программа?

+0

SQL-команды, которые записывают данные (обновлять, вставлять, удалять) блокировать места на модифицированных строках. Замки остаются активными до тех пор, пока не будет подтверждено фиксация или откат. Если другой сеанс (пользователь) пытается изменить заблокированную запись, сеанс приостанавливается и должен ждать, пока блокировка не будет удалена другим сеансом. – krokodilko

+0

Вам не нужен курсор для этого, вы можете уменьшить всю процедуру до двух простых операторов. –

+0

да, но мне нужно вставить в измененную таблицу, как старое значение и новое значение в одной процедуре. – user2686661

ответ

0

Если вы выполните эту процедуру 2 раза параллельно, вторая не выполнит выбор до первого коммита. (Конечно, если вы запускаете другие операторы с тем же самым для обновления комм-предложения, они будут поставлены в очередь одинаково.)

+0

Что делать, если строка уникальна при обновлении для каждого другого входа p_dept_id указанной выше процедуры? все же блокировка будет действовать. – user2686661

+0

Только выбранные строки будут заблокированы. Поэтому, если вы вызываете эту процедуру с разными p_dept_id, они не будут ждать друг друга, потому что они блокируют разные строки. –

+0

Спасибо за ответ. Ждал ответа. – user2686661

Смежные вопросы