오라클 객체
- 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 등은 컬럼별칭 사용