본문 바로가기

빅데이터과정/PL/SQL

#10_140627_PL_SQL_WHERE CURRENT OF

728x90

# WHERE CURRENT OF

where current of emp_cursor;
내가 방금 fetch 해온 그 행을 가리킨다
실행절에서 where current of 절을 사용하려면 커서 선언시 for update 절을 사용해야 한다
select … for update 를 하면서 select 해오는 테이블의 그 행에 lock이 걸림
declare
cursor emp_cursor is
select ename, rank() over(order by sal desc) as "순위"
from emp
for update;

update emp
set rnk=emp_record.순위
where current of emp_cursor


수행한 후에 commit; 을 해줘야 한다



문제76. where current of 절을 사용해서 월급에 대한 순위를 rnk 에 업데이트 하시오


ALTER TABLE EMP
ADD rnk NUMBER(10);

declare
cursor emp_cursor is
select empno, rank() over(order by sal desc) as "순위"
 from EMP
 FOR UPDATE;
begin
 for emp_record in emp_cursor loop
  update emp
  set rnk=emp_record.순위
  where CURRENT OF emp_cursor;
 end loop;
 COMMIT;
end;
/
loop가 끝난 이후에 commit; 을 해주도록 한다. loop안에 넣으면 돌때마다 commit을 하기 때문에 성능이 떨어진다.


문제78. 사원 테이블에 dayt2 라는 컬럼을 추가하고 day2 컬럼에 값을 갱신하는데 자기가 입사한 요일로 값을 갱신하시

ALTER TABLE EMP
ADD day2 VARCHAR2(10);

declare
cursor emp_cursor is
select TO_CHAR(hiredate,'DAY') 요일
 from EMP
 FOR UPDATE;
begin
 for emp_record in emp_cursor loop
  update emp
  set day2 = emp_record.요일
  where CURRENT OF emp_cursor;
 end loop;
 COMMIT;
end;

/

'빅데이터과정 > PL/SQL ' 카테고리의 다른 글

#13_140701_PL_SQL_동적 SQL  (0) 2014.07.14
#12_140630_PL_SQL_FUNCTION  (0) 2014.07.14
#11_140627_PL_SQL_예외처리  (0) 2014.07.14
#10_140626_PL_SQL_CURSOR  (0) 2014.07.14
#10_140626_PL_SQL_중첩 테이블  (0) 2014.07.14