테이블형 레코드
특정 테이블의 컬럼 값을 받아오는 변수를 선언할 때, 다음과 같이 선언하면 굳이 해당 컬럼의 데이터 타입을 찾을 필요가 없었다.
변수명 테이블명.컬럼명%TYPE;
반면 특정 테이블의 모든 컬럼을 받아 사용하는 레코드를 선언할 때는 ‘%TYPE’ 대신 ‘%ROWTYPE’으로 선언한다.
레코드 변수명 테이블명.%ROWTYPE;
(굳이 이름을 붙이자면) 위와 같은 형태를 테이블형 레코드 변수라고 하며 이런 형태의 레코드 변수는 해당 테이블의 모든 컬럼을 필드로 가진다. 이번에는 부서 테이블의 모든 컬럼을 가진 ch11_dep2 란 테이블을 만들어 보자.
입력
CREATE TABLE ch11_dep2 AS
SELECT *
FROM DEPARTMENTS;
TRUNCATE TABLE ch11_dep2;
결과
table CH11_DEP2이(가) 생성되었습니다.
table CH11_DEP2이(가) 잘렸습니다.
이제 테이블형 레코드 변수를 선언해서 사용해 보자. 먼저 부서 테이블에서 데이터를 가져와 레코드 변수에 넣고, 이 변수를 읽어 다시 ch11_dep2 테이블에 넣어 보자.
입력
DECLARE
-- 테이블형 레코드 변수 선언
vr_dep departments%ROWTYPE;
BEGIN
-- 부서 테이블의 모든 정보를 레코드 변수에 넣는다.
SELECT *
INTO vr_dep
FROM departments
WHERE department_id = 20;
-- 레코드 변수를 이용해 ch11_dep2 테이블에 데이터를 넣는다.
INSERT INTO ch11_dep2 VALUES vr_dep;
COMMIT;
END;
결과
익명 블록이 완료되었습니다.
테이블의 데이터를 레코드 변수에 담을 때는 간단히 SELECT INTO 구문을 사용할 수 있는데 특정 컬럼만 받으려면 컬럼명과 레코드의 필드명을, 모든 컬럼을 받으려면 레코드 변수명만( SELECT * 형태) 기술해줘도 된다.