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

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