지금까지 예제에서는 레코드 변수를 써서 INSERT만을 했는데, UPDATE문도 사용해 보자. 사용법은 UPDATE문의 SET 절에서 갱신할 컬럼을 명시하고 해당 컬럼 값으로는 “레코드변수명.필드명”을 기술하면 된다. 만약 테이블의 모든 컬럼을 갱신하려면 SET절에 모든 컬럼과 레코드 변수의 필드를 명시해야 할 텐데, 이렇게 하는 것은 매우 번거롭다. INSERT 문처럼 컬럼 수와 순서, 타입이 같다면 간단히 레코드 변수만 기술해서 UPDATE는 할 수 없을까? 다음 예제 속에 그 방법이 나와 있다.
입력
DECLARE
-- 레코드 변수 선언
vr_dep ch11_dep%ROWTYPE;
BEGIN
vr_dep.department_id := 20;
vr_dep.department_name := '테스트';
vr_dep.parent_id := 10;
vr_dep.manager_id := 200;
-- ROW를 사용하면 해당 로우 전체가 갱신됨
UPDATE ch11_dep
SET ROW = vr_dep
WHERE department_id = vr_dep.department_id;
COMMIT;
END;
결과
익명 블록이 완료되었습니다.
위 블록을 실행하면 20번 부서의 값이 바뀌었음을 확인할 수 있을 것이다. 위 소스처럼 SET 절에 ROW 키워드를 사용하면 레코드로 전체 행을 갱신할 수 있는데, 단 해당 테이블의 컬럼 개수, 순서, 타입과 레코드의 필드가 모두 동일해야 한다. 사실 로우 전체를 갱신하는 일은 드물기 때문에 보통은 컬럼명과 레코드 필드명을 모두 기술해서 사용한다.