테이블형 레코드

    특정 테이블의 컬럼 값을 받아오는 변수를 선언할 때, 다음과 같이 선언하면 굳이 해당 컬럼의 데이터 타입을 찾을 필요가 없었다.

        변수명 테이블명.컬럼명%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 * 형태) 기술해줘도 된다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.