개발공부개발공부 2021. 2. 25. 14:47

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

  데이터 타입을 지정하는 방법중에서 특이하면서도 유용한 방식이 있는데 변수나 컬럼, 테이블 , 커서 등 기존 선언을 참고하여 데이터 타입을 지정하는 방법이 있습니다. 이를 앵커라고 부르며(오라클에서 공식적으로 사용하는 언어는 아니라고 합니다.)  앵커를 활용하면 선언문이 간결해지는 것과 차후에 참조되는 타입이 변경되더라고  참조하는 쪽은 수정을 하지 않아도 된다는 장점을 가지고 있습니다

%TYPE

DECLARE
    v_ename emp.ename%TYPE; -- 특정 컬럼의 타입이랑 동일하게 생성
    v_ename2 v_ename%TYPE;  -- 특정 변수의 타입이랑 동일하게 생성 %TYPE      
BEGIN
    SELECT ename INTO v_ename
    FROM EMP
    WHERE ROWNUM =1;
    v_ename2 := v_ename;
end;

  위 예제는 %TYPE에 대한 사용을 보여줍니다 %TYPE 은 다른 변수 또는 칼럼에 데이터 타입과 동일한 타입을 지정할 떄 사용됩니다 이는 스칼라 앵커 라고 불리기도 합니다

%ROWTYPE

DECLARE
    v_emprec emp%ROWTYPE;
    v_emprec2 v_emprec%TYPE;
    CURSOR emp_cursor(a_empno NUMBER) IS 
        SELECT 
        from emp
        where empno = a_empno;
    v_emprec emp_cursor%ROWTYPE;
BEGIN
        SELECT * INTO v_emprec
        from emp
        where rownum =1;
        v_emprec2 :=  v_emprec;
        
        open emp_cursor(7788);
        FERCH emp_cursor into v_emprec3;
        close emp_cursor;
end;

  위 예저는 %ROWTYPE 과 %TYPE 이 모두 기입 되어 있습니다  %ROWTYPE 과 같은 경우 커서의 로우와 동일한 구조를 가지는 레코드를 지정합니다 또한 이는 로우 앵커라고 부르기도 합니다.