* %TYPE

    : 컬럼이나 변수의 정확한 데이터 타입을 구함

    : 변수 선언시 컬럼 또는 변수 이름 바로 뒤에 붙여 사용


  cf.) %ROWTYPE



  * %TYPE 장점

    1) 데이터 타입 불일치에 의한 에러 없음

    2) 데이터 타입에 대한 하드 코딩 불필요

    3) 컬럼 정의가 변해도 변수 선언 수정 불필요



  * bind variable vs. variable


ed type01_a.sql


declare

 v_ename emp.ename%type; --> v_ename  varchar2(10)과 동일

 v_sal   emp.sal%type; --> v_sal    number(7, 2)와 동일

begin

 select ename, sal into v_ename, v_sal

 from emp 

 where empno = &1;


 p(v_ename);

 p(v_sal);

end;

/


@type01_a 7788

구   7:                   where empno = &1;

신   7:                   where empno = 7788;

SCOTT

3000


@type01_a 7499

   ------------------------------


ed type01_b.sql


var b_ename varchar2(30)

var b_sal   number


begin

 select ename, sal into :b_ename, :b_sal

 from emp

 where empno = &1;

end;

/


print b_ename b_sal



@type01_b 7788


print b_ename b_sal


@type01_b 7499


print b_ename b_sal


   ==============================



ed type02_a.sql


declare

 v_sal     emp.sal%type;

 v_deptno  emp.deptno%type;

 v_avg_sal number;

begin

 select sal, deptno into v_sal, v_deptno

 from emp 

 where empno = &1;


 select avg(sal) into v_avg_sal

 from emp 

 where deptno = v_deptno;


 p('부서 평균 급여 : ' || to_char(v_avg_sal));

 p('사원 급여 : ' || v_sal);

 p(v_sal - v_avg_sal || ' 만큼 더 받습니다.');

end;

/


@ type02_a 7499


   ------------------------------


ed type02_b.sql


var b_sal     number;

var b_deptno  number;

var b_avg_sal number;

var b_diff    number;


begin

 select sal, deptno into :b_sal, :b_deptno

 from emp 

 where empno = &1;


 select avg(sal) into :b_avg_sal

 from emp 

 where deptno = :b_deptno;


 select :b_sal - :b_avg_sal into :b_diff

 from dual;


 :b_diff := :b_sal - :b_avg_sal + 10;

end;

/


print b_avg_sal b_sal b_diff


print b_avg_sal b_sal b_diff


@type02_b 7499


+ Recent posts