[Oracle] 오라클, 프로시저 구문 예제 및 응용법(2) - 참조형(%type, %rowtype)
- Database/Oracle
- 2019. 4. 21. 15:53
참조형
- 원본(컬럼)의 자료형을 참조해서 변수의 자료형으로 사용할 수 있다.
- 원본(컬럼)의 자료형을 몰라도 된다.
- 유지 보수 용이
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;
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 함수, ADD_MONTHS() (0) | 2019.05.29 |
---|---|
[Oracle] sql developer, 엑셀로 테이블에 데이터 삽입하기. (0) | 2019.04.21 |
[Oracle] 오라클, 프로시저 구문 예제 및 응용법(1) (0) | 2019.04.15 |
PL/SQL( Procedural Language Extensions to SQL )이란? (2) | 2019.03.31 |
[Oracle] 오라클 #23, account(사용자) 관련 SQL (0) | 2019.03.17 |