더북(TheBook)

레코드 변수끼리 할당할 때는 두 레코드 변수의 타입, 즉 전체 필드의 순서, 구조, 데이터 타입이 같아야 하지만, 필드만 할당한다면 해당 필드의 데이터 타입만 같아도 된다. 그리고 레코드 변수를 사용해 테이블에 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 문에서도 레코드를 사용할 수 있다.

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