[Oracle] 오라클, 프로시저 구문 예제 및 응용법(2) - 참조형(%type, %rowtype)

참조형

- 원본(컬럼)의 자료형을 참조해서 변수의 자료형으로 사용할 수 있다.

- 원본(컬럼)의 자료형을 몰라도 된다.

- 유지 보수 용이


1. %type

- 대상 컬럼의 자료형과 길이를 참조해서 해당 변수에 적용하겠습니다.

- 복사되는 항목

    a. 자료형(varchar2, integer)

    b. 길이 (20, 30)

    c. not null 


declare

    vname tblInsa.name%TYPE; --varchar2(20) not null

    vbuseo tblInsa.buseo%type;

begin

    select name,buseo into vname,vbuseo from tblInsa 

        where (basicpay+sudang) = (select min(basicpay+sudang) from tblInsa); --심심해

    

    DBMS_OUTPUT.put_line(vname||'?');    

    DBMS_OUTPUT.put_line(vbuseo||'?');   

end;


vname tblInsa.name%type; -> tblInsa라는 테이블에 name이라는 컬럼이 있는데 그 컬럼의  데이터타입을 참조하겠다.( name varchar2(100) not null 이라면 vname도 varchar2(100) not null로 데이터를 선언하겠다.) 라는 의미입니다.


--> 하지만 참조해야할 자료형의 데이터가 많다면?? ( 참조해야할 테이블의 컬럼의 갯수가 50개라면...?)


declare

vname tblInsa.name%type;

vname tblInsa.name%type;

vname tblInsa.name%type;

vname tblInsa.name%type;

vname tblInsa.name%type;

vname tblInsa.name%type;

...(50개 선언)

vname tblInsa.name%type;

begin


end;


이렇게 다 선언해야한다.. 그런데 더 손쉬운 방법을 oracle에서 제공한다. -> %rowtype


2. %rowtype

- 테이블 레코드 구조를 참조해서 해당 변수에 적용하겠습니다.

- %type의 집합


primary key가 1010 번인 사람의 name, buseo, city 컬럼을 vrow에 담고 출력.


declare

    vrow tblInsa%rowtype; --10개의 컬럼을 가진 레코드 구조 변수

    vnum tblInsa.num%type;

begin

    vnum:=1010;

    

    select name,buseo,city into vrow from tblInsa where num = vnum;


    dbms_output.put_line(vrow.name);

    dbms_output.put_line(vrow.buseo);

    dbms_output.put_line(vrow.city);

    

end;


tblMen -> 1명 -> tblWomen : 옮기기


declare 

    vrow tblMen%rowtype;

begin

    

    1. '무명씨'의 모든 정보 가져오기

    select * into vrow from tblMen where name='무명씨';

    

    2. 1번의 모든 정보를 tblWomen에 추가하기(insert)

    insert into tblWomen(name,age,height,weight,couple) 

        values(vrow.name,vrow.age,vrow.height,vrow.weight,vrow.couple); 

        

    3. tblMen에서 '무명씨'정보 삭제하기(delete)

    delete from tblMen where name = vrow.name;

    

end;


댓글

Designed by JB FACTORY