<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>
select * from employees
where employee_id in (100,200)
order by 1
for update;
# 현재 상황에서는 employees 테이블은 잠김상태가 되므로 다른 업데이트 및 삭제 등,
# 수정을 할 수 없다.
commit;
# commit 명령어가 실행될때까지 변경할 수 없다.
<좌측 그림> for update 실행화면
<우측 그림> for update 때문에 다른 세션에서 update 문이 완료되지 않는다
<좌측 그림> commit 실행
<우측 그림> 다른 세션에서 update 문이 완료된다
롤백을 통해서 원래대로 복구
DECLARE
CURSOR c_emp_dept30 is
SELECT employee_id, first_name,salary FROM employees
where department_id=30
for update;
BEGIN
for i in c_emp_dept30
loop
update employees
set salary=salary+1
where employee_id=i.employee_id;
end loop;
commit;
END;
------------------------------------------------------------
select employee_id, first_name,salary from employees
where department_id=30;
------------------------------------------------------------
EMPLOYEE_ID FIRST_NAME SALARY
----------- -------------------- ----------
114 Den 11101
115 Alexander 3201
116 Shelli 3001
117 Sigal 2901
118 Guy 2701
119 Karen 2601
6 rows selected.
위의 샘플코드는 where 조건절을 이용하여 업데이트문을 실행하지만 이부분은 아래 샘플처럼 변경해서 처리가능하다.
* current of xxx
-------------- current of --------------
DECLARE
CURSOR c_emp_dept30 is
SELECT employee_id, first_name,salary FROM employees
where department_id=30
for update;
BEGIN
for i in c_emp_dept30
loop
update employees
set salary=salary-1
where current of c_emp_dept30;
end loop;
commit;
END;
------------------------------------------------------------
select employee_id, first_name,salary from employees
where department_id=30;
------------------------------------------------------------
EMPLOYEE_ID FIRST_NAME SALARY
----------- -------------------- ----------
114 Den 11100
115 Alexander 3200
116 Shelli 3000
117 Sigal 2900
118 Guy 2700
119 Karen 2600
6 rows selected.
'Database > PLSQL' 카테고리의 다른 글
027 - [Oracle PL/SQL] Exceptions - common mistakes (0) | 2024.02.21 |
---|---|
026 - [Oracle PL/SQL] Exceptions (0) | 2024.02.20 |
024 - [Oracle PL/SQL] Cursor - Cursor with Parameters (0) | 2024.02.20 |
023 - [Oracle PL/SQL] Cursor - For loop cursor (0) | 2024.02.20 |
022 - [Oracle PL/SQL] Cursor - Explicit Cursor Attributes (0) | 2024.02.19 |