본문 바로가기

오라클

view 뷰

--view 파일 : 물리적인 테이블을 근거로 논리적인 가상 테이블을 만들어 사용 물리적으로 데이터를 포함하지도 않고, 공간을 차지하지도 않는다.

-- select 문의 조건을 파일로 만들어 테이블처럼 사용한다.

-- 사용 이유 - 긴 쿼리문 단순화, 보안 강화, 자료의 독립성 확보

-- 뷰를 생성하기 위해서는 권한이 필요하다

sqlplus / as sysdba

grant create view to scott;


형식) 

create [or replace] view 뷰 파일명 as select문 

drop view 뷰 파일명


--뷰 생성 예시

create table test1 as select * from sawon;

select * from test1;


--조건으로 뷰 생성

create view v_a as select sawon_no, sawon_name, sawon_pay from sawon where sawon_ibsail > '2000-1-1';

select * from v_a

drop view v_a;

create or replace view v_a as select sawon_no, sawon_name, sawon_pay from sawon where sawon_ibsail > '2000-1-1';

desc v_a;

create view v_b as select * from sawon where sawon_name > '김%' or sawon_name like '이%';

select * from v_b;


--뷰는 원본에 의존

rename spring to sawon;

-- rename sawon to spring;

select * from v_a; -- 원본테이블에 의존하므로 원본이름이 바뀌면 출력안댐


--뷰 생성

create view v_c as select * from sawon order by sawon_pay desc;

select * from v_c;


--뷰 생성시 계산컬럼

create view v_d as select sawon_no, sawon_name, sawon_pay * 10000 sawon_pay from sawon; -- 계산컬럼은 반드시 별명을 줘야한다.


--뷰를 뷰로 생성

create view v_e as select sawon_name, sawon_pay from v_d where sawon_pay > 30000000; -- view로 view를 만듬

select * from v_e;


--삽입

create view v_f as select sawon_no, sawon_name, buser_num from test1;

select * from v_f;

insert into v_f(sawon_no, sawon_name) values (50,'신기해'); -- 원본테이블인 test1을 갱신.

select * from v_f;

select * from test1;


--뷰 삽입 주의할점

create view v_h as select sawon_no, sawon_name, sawon_pay from test1 where sawon_pay >= 5000;

insert into v_h(sawon_no, sawon_name, sawon_pay) values(51,'손오공',6700);

insert into v_h(sawon_no, sawon_name, sawon_pay) values(52,'손오정',1200); 

select * from v_h -- 손오공은 보이지만 손오정은 보이지 않는다. 해당 뷰의 조건에 주의해야한다. 실제로 test1테이블에 자료는 삽입된다.


--뷰 갱신 주의할점

create view v_i as select sawon_no, sawon_name, sawon_pay * 0.1 as tex from test1; -- 가상열 tex 만듬

select * from v_i;

update v_i set sawon_name='저팔계' where sawon_name='손오공';

update v_i set tex=600 where sawon_name='사오정'; -- 가상열은 수정할 수 없다.

delete from v_i where tex=222; --가상열을 조건으로 사용하여 삭제할 수 있다.


--group by로 만들어진 컬럼을 가진 뷰 주의할점

create view v_j as select sawon_jik, sum(sawon_pay) as tot, count(*) as inwon from test1 group by sawon_jik;

select * from v_j;

insert into v_j(sawon_jik,.tot,inwon) values('이상',8000,3); --x

update v_j set tot=8000 where sawon_jik='대리'; --x

delete from v_j where sawon_jik='과장'; --x

delete from test1 where sawon_jik is null --o null은 삭제 조건으로 가능


-- 계산 컬럼은 insert,delete,update 불가능

create view v_k as select sum(sawon_pay) as pay, count(*) as count from test1;

select * from v_k; -- select만 가능한 뷰가 되었다.

create view v_l as select distinct sawon_jik from test1;

select * from v_l; -- select만 가능한 뷰가 되었다.

'오라클' 카테고리의 다른 글

subquery 활용  (0) 2014.03.05
any와 all  (0) 2014.03.05
subquery  (0) 2014.03.05
여러가지 Join 예제  (0) 2014.03.03
Join  (0) 2014.03.03