* %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