앵커(%)를 사용한 데이터 타입 지정

    변수나 컬럼, 테이블, 커서 등의 기존 선언을 참조하여 데이터 타입을 지정하는 방법이다.

    이 방법을 사용하면 식별자의 선언문이 간단해지고, 차후에 참조되는 타입이 변경되더라도 이를 참조하는 쪽은 소스 코드를 수정하지 않아도 된다는 장점이 있다.

     

    %TYPE

    다른 변수 또는 컬럼의 데이터 타입과 동일한 타입을 지정할 때 사용된다.

    DECLARE
    	v_ename		emp.ename%TYPE;		--컬럼의 타입을 참조하여 데이터 타입을 지정(칼럼 앵커)
        v_ename2	v_ename%TYPE;		--위의 변수 v_ename의 타입을 참조하여 데이터 타입을 지정(변수 앵커)
    BEGIN
    	SELECT ename INTO v_ename
        	FROM EMP
        WHERE ROWNUM = 1;
        v_ename2 := v_ename;
    END;

     

    %ROWTYPE

    테이블 또는 커서의 로우(Row)와 동일한 구조를 가지는 레코드를 지정

    %ROWTYPE은 로우 앵커라고도 불린다. %ROWTYPE은 참조되는 테이블 또는 커서와 동일한 칼럼명과 데이터 타입을 가지는 레코드를 선언한다.

    테이블%ROWTYPE으로 선언된 레코드 변수는 SELECT * FROM 테이블을 사용하여 TABLE의 전체 칼럼을 FETCH하거나 커서의 결과를 저장할 레코드를 선언할 때 유용하게 사용된다.

     

    DECLARE
    	v_emprec emp%ROWTYPE;	--테이블을 참조하여 선언(로우 앵커), e_emprec는 RECORD가 됨
        v_emprec2 v_emprec%TYPE -- RECORD 변수 v_emprec를 참조하여 선언(변수 앵커)
        
        CURSOR emp_cursor(a_empno NUMBER) IS
        	SELECT empno, ename, hiredate
            	FROM emp
             WHERE empno = a_empno;
            v_emprec3 emp_cursor%ROWTYPE;	-- 커서 선언을 참조하여 레코드 변수 선언
    BEGIN
    	SELECT * INTO v_emprec
        	FROM EMP
        WHERE ROWNUM = 1;
        v_emprec2 := v_emprec;
        
        OPEN emp_cursor(7788);
        FETCH emp_cursor INTO v_emprec3;
        CLOSE emp_cursor;
    END;

     

    스칼라 데이터 타입과 컴포지트 데이터 타입

    단 하나의 값만을 저장할 수 있는 데이터 타입을 스칼라(Scalar) 데이터 타입이라고 하고, 두 개 이상의 값을 저장할 수 있는 데이터 타입을 컴포지트(Composite) 데이터 타입이라고 한다.

    항목 스칼라 데이터 타입 컴포지트 데이터 타입
    특징 - 오직 하나의 값만을 가진다
    - 다른 내부적인 구성항목(자료구조)을 가지지 않는다
    - 내부적으로 여러 개의 구성항목을 가질 수 있다
    - 내부 구성 항목은 스칼라 데이터 타입이거나 다른 컴포지트 데이터 타입일 수 있다.
    VARCHAR2
    NUMBER
    DATE
    BOOLEAN
    Associative Array
    VARRAY
    Nested Table
    Record

     

    'DATABASE > SQL, PL-SQL' 카테고리의 다른 글

    표현식 - 1  (0) 2021.01.24
    변수와 상수, 리터럴  (0) 2021.01.20
    데이터 타입 상세 소개 - 2  (0) 2021.01.19
    데이터 타입 상세 소개 - 1  (0) 2021.01.19
    데이터 타입 소개  (0) 2021.01.19

    댓글