더북(TheBook)

테이블형 레코드

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

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

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