DATABASE/SQL, PL-SQL
앵커(%)를 사용한 데이터 타입 지정
devstep88
2021. 1. 19. 22:43
변수나 컬럼, 테이블, 커서 등의 기존 선언을 참조하여 데이터 타입을 지정하는 방법이다.
이 방법을 사용하면 식별자의 선언문이 간단해지고, 차후에 참조되는 타입이 변경되더라도 이를 참조하는 쪽은 소스 코드를 수정하지 않아도 된다는 장점이 있다.
%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 |