레코드 변수끼리 할당할 때는 두 레코드 변수의 타입, 즉 전체 필드의 순서, 구조, 데이터 타입이 같아야 하지만, 필드만 할당한다면 해당 필드의 데이터 타입만 같아도 된다. 그리고 레코드 변수를 사용해 테이블에 INSERT, UPDATE도 할 수 있다. 테스트를 위해 다음과 같이 부서 테이블의 복사본을 만들어 보자.
입력
CREATE TABLE ch11_dep AS
SELECT department_id, department_name, parent_id, manager_id
FROM DEPARTMENTS ;
TRUNCATE TABLE ch11_dep;
결과
table CH11_DEP이(가) 생성되었습니다.
table CH11_DEP이(가) 잘렸습니다.
이제 레코드 변수를 선언해서 값을 할당한 후 이를 이용해 데이터를 넣어 보자.
입력
DECLARE
-- 부서 레코드 타입 선언
TYPE depart_rect IS RECORD (
department_id departments.department_id%TYPE,
department_name departments.department_name%TYPE,
parent_id departments.parent_id%TYPE,
manager_id departments.manager_id%TYPE
);
-- 위에서 선언된 타입으로 레코드 변수 선언
vr_dep depart_rect;
BEGIN
vr_dep.department_id := 999;
vr_dep.department_name := '테스트부서';
vr_dep.parent_id := 100;
vr_dep.manager_id := NULL;
-- 레코드 필드를 명시해서 INSERT
INSERT INTO ch11_dep VALUES ( vr_dep.department_id, vr_dep.department_name, vr_dep.parent_id, vr_dep.manager_id);
-- 레코드 필드 순서와 개수,타입이 같다면 레코드 변수명으로만 INSERT 가능
INSERT INTO ch11_dep VALUES vr_dep;
COMMIT;
END;
결과
익명 블록이 완료되었습니다.
위 소스를 보면 알 수 있겠지만 입력할 컬럼에 “레코드변수명.필드명” 형태로 레코드 필드를 매핑할 수도 있고, 테이블 컬럼의 개수, 순서, 타입이 같다면 레코드 변수명만 명시해도 INSERT를 할 수 있다. 결과를 확인해 보면 ch11_dep 테이블에 두 건의 데이터가 들어가 있음을 알 수 있다. INSERT 뿐만 아니라 UPDATE 문에서도 레코드를 사용할 수 있다.