오라클 객체 - VIEW

jsbak·2020년 9월 3일
0

DB

목록 보기
28/35

오라클 객체

  • view, sequence, synonym, index등이 제공됨

1. VIEW 객체

  • 가상의 테이블
  • 검색명령의 결과 집합
  • 필요한 정보가 다수의 테이블에 존재하는 경우
  • 특정 자료에 대한 접근제한(보안성 확보)
  • 사용형식
 CREATE [OR REPLACE][FORCE|NOFORCE] VIEW 뷰이름[컬럼LIST]
 AS 
   SELECT 명령;
   [WITH CHECK OPTION]
   [WITH READ ONLY];
 - FORCE : 기준 테이블이 없어도 VIEW 생성
           default는 NOFORCE임
 - '컬럼LIST' : 생성되는 뷰의 컬럼명 생략되면 기준테이블의 컬럼명이 사용
 - 'WITH CHECK OPTION' : SELECT문에서 조건을 부여하여 VIEW가 생성된 경우
                그 조건에 맞지않는 VIEW의 수정(UPDATE)INSERT는 제한
 - 'WITH READ ONLY' : 생성된 뷰에서 값을 변경했을때 자동적으로 원본이 바뀌는것을 방지

예시)회원테이블에서 마일리지가 3000이상인 회원의 회원명, 직업, 마일리지를 출력하는 VIEW를 생성하시오.

 create or replace view v_mem
 as
   select mem_name as 회원명,
          mem_job as 직업,
          mem_mileage as 마일리지
     from member
    where mem_mileage >= 3000;
select * from v_mem;
 update v_mem
    set 마일리지=4700
  where 회원명='오철희';
 --원본이 바뀜, 값이 3200>> 4700으로 변경됨
 select mem_name as 회원명,
          mem_job as 직업,
          mem_mileage as 마일리지
     from member
    where mem_name = '오철희';
--삭제 불가 연관되어있는 테이블이 있다.
delete v_mem
 where 회원명='오철희';

예시)2005년 7월 회원별 구매정보를 조회하시오.
Alias는 회원명, 구매수량합계, 구매금액합계
단, 결과를 뷰로 생성하시오.

 select b.mem_name as 회원명,
        sum(a.cart_qty) as 구매수량합계,
        sum(a.cart_qty * c.prod_price) as 구매금액합계
   from cart a, member b, prod c
  where a.cart_member = b.mem_id
    and a.cart_prod = c.prod_id
    and cart_no like '200507%'
  group by b.mem_name
  order by 1;
 --(뷰생성)
 create or replace view v_cart01(
   MNAME, SUM_CNT, SUM_MONEY)
 as
   select b.mem_name as 회원명,
        sum(a.cart_qty) as 구매수량합계,
        sum(a.cart_qty * c.prod_price) as 구매금액합계
   from cart a, member b, prod c
  where a.cart_member = b.mem_id
    and a.cart_prod = c.prod_id
    and cart_no like '200507%'
  group by b.mem_name
  order by 1;
 -- 
 select * from v_cart01;
select mem_id, mem_name, mem_mileage
   from member
  where mem_mileage<=1000;

회원테이블에서 마일리지가 1000이하인 회원들에게 3000씩 추가마일리지를 지급하시오

 update member
    set mem_mileage=mem_mileage+3000
  where mem_mileage<=1000;
    -- 원본이 변경되면 뷰도 변경됨
select * from v_mem;
---
 update v_mem
    set 마일리지=2500
  where 회원명='신용환';
 ---
  create or replace view v_mem
 as
   select mem_name as 회원명,
          mem_job as 직업,
          mem_mileage as 마일리지
     from member
    where mem_mileage >= 3000
    with check option;
 --'WITH CHECK OPTION'으로 인해 조건에 맞지 않는 것으로는 변경 불가
 update v_mem
    set 마일리지=2500
  where 회원명='김은대';

★ 주의 사항

  • 제약조건(WITH 절 포함)이 있는 VIEW에서 ORDER BY절 사용금지
  • 뷰가 GROUP BY, DISTINCT를 사용하여 생성된 경우 INSERT, UPDATE, DELETE를 사용할 수 없음.
  • 표현식 또는 함수(일반)를 사용하여 뷰가 생성된 경우 해당 컬럼을 수정할 수 없다.
  • CURRVAL, NEXTVAL 등의 의사레코드는 사용할 수 없음
  • ROWID, ROWNUM 등은 컬럼별칭 사용
profile
끄적끄적 쓰는곳

0개의 댓글