더북(TheBook)

사용자 정의형 레코드

사용자가 직접 레코드를 정의하고 선언해 사용할 수 있다. 레코드는 테이블과 비슷한 구조인데 레코드에서 테이블의 컬럼에 해당하는 것을 필드라고 한다. 테이블은 각 컬럼으로 구성된 로우가 여러 개인 반면, 레코드의 로우 수는 단 한 개 뿐이다. 사용자 정의형 레코드는 테이블을 정의하듯이 다음과 같이 레코드명, 필드명, 필드 타입을 명시한다.

    TYPE 레코드명 IS RECORD (
      필드명1 필드1 타입 [[NOT NULL] := 디폴트값],
      필드명2 필드2 타입 [[NOT NULL] := 디폴트값],
    ...
      );
    레코드변수명 레코드명;

커서 변수를 사용하듯이 레코드도 먼저 타입을 선언한 뒤 해당 타입에 대한 변수를 선언한다. 레코드 타입 선언 자체는 테이블 생성 구문과 비슷한데, 디폴트 값도 설정할 수 있고 NOT NULL 속성도 설정할 수 있다. 실행부에서는 레코드 변수를 통해 레코드를 조작할 수 있다. 그럼 부서 테이블과 같은 구조(날짜 컬럼 제외)의 레코드를 선언해 보자.

입력

    DECLARE
      -- 부서레코드 타입선언
      TYPE depart_rect IS RECORD (
           department_id      NUMBER(6),
           department_name    VARCHAR2(80),
           parent_id          NUMBER(6),
           manager_id         NUMBER(6)
      );

      -- 위에서 선언된 타입으로 레코드 변수 선언
      vr_dep depart_rect;

    BEGIN
    ...
    END;

depart_rect레코드는 부서 테이블과 같은 구조이므로 각 필드의 데이터 타입을 표기할 때, 변수처럼 %TYPE을 사용할 수 있다.

입력

    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
    …
    END;
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.