Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

꺄르륵

[Oracle SQL Developer] 기초 XVII - VIEW 본문

프로그래밍/DB

[Oracle SQL Developer] 기초 XVII - VIEW

Teddy. 2019. 10. 29. 19:53

VIEW


1. VIEW 객체
  - 가상의 테이블
  - 기존의 VIEW 나 테이블 객체를 통하여 생성(SELECT 문의 결과)
  - VIEW 를 사용하는 목적
    . 복잡한 쿼리의 결과를 자주 참조하는 경우에 사용된다.
    . 테이블 전체가 아닌 일부분만 필요한 경우에 사용된다.
    . 특정 테이블에 대한 접근을 제한할때 사용한다.(보안의 경우)
    
  1.1. 사용형식
    CREATE [OR REPLACE][FORCE|NOFORCE] VIEW VIEW명[(             -- [OR REPLACE] 덮어쓰기, 하나의 VIEW로 최신화 작업을할 때 사용된다.
         컬럼명1, 컬럼명2, ...                                     -- VIEW의 컬럼명을 생략시 원본테이블에 있는 컬럼명을 따라쓴다.
    )] 
    AS 
        (SELECT 문);                                             -- VIEW가 생성될 대상
        [WITH CHECK OPTION[CONSTRAINT 제약명]];     
        [WITH READ ONLY];
       
    . '컬럼명1, 컬럼명2...' : 뷰 생성에 사용될 컬럼명
    . FORCE|NOFORCE : FORCE - 기준테이블이 없어도 뷰가 생성된다.  DEFAULT 값은 NOFORCE 이다.
    . WITH CHECK OPTION : SELECT 문에 사용된 WHERE 절의 조건에 위배되는 데이터를 뷰에 수정/삽입을 할 수없다.
    . WITH READ ONLY : 읽기 전용 뷰를 생성한다.
    
    EX) 회원테이블에서 마일리지가 3000이상인 회원 정보로 VIEW 를 생성하시오.
        회원번호, 회원명, 마일리지, 직업
        
    CREATE OR REPLACE VIEW MEMBER_VIEW (MID, MNAME, MILEAGE, MJOB)
    AS
    (SELECT MEM_ID AS 회원번호, 
           MEM_NAME AS 회원명,
           MEM_MILEAGE AS 마일리지,
           MEM_JOB AS 직업
      FROM MEMBER     
     WHERE MEM_MILEAGE >= 3000);
    
    SELECT * FROM MEMBER_VIEW;
    
    ** MEMBER_VIEW에서 신용환(c001) 회원의 마일리지를 5500으로 변경하시오.
    
    UPDATE MEMBER_VIEW 
       SET MILEAGE = 5500
     WHERE MID = 'c001';
    
    
    
    **
    TABLE > CURSOR > VIEW 의 순서로 규모가 결정된다.


    -- WITH CHECK OPTION
    
    CREATE OR REPLACE VIEW MEMBER_VIEW (MID, MNAME, MILEAGE, MJOB)
    AS
    (SELECT MEM_ID AS 회원번호, 
           MEM_NAME AS 회원명,
           MEM_MILEAGE AS 마일리지,
           MEM_JOB AS 직업
      FROM MEMBER     
     WHERE MEM_MILEAGE >= 3000)
     WITH CHECK OPTION;
     
     
    UPDATE MEMBER_VIEW 
       SET MILEAGE = 2500
     WHERE MID = 'c001';     
     
     
    INSERT INTO MEMBER_VIEW
         VALUES('c002','1234','진용환','930502','1632647',2005/05/02,'123-492','대전'
         ,'123번지','032-243-4912','275-2859','010-0348-3892','DKANPSK@GOOGLE.COM','학생','운동',' ',' ',3500);
       
     
    CREATE OR REPLACE VIEW V_LPRO
    AS 
      SELECT * FROM LPROD
       WHERE LPROD_ID <= 10
      WITH READ ONLY;
       
    SELECT * FROM V_LPRO;       
    
    INSERT INTO V_LPRO
    VALUES(0,'P304','가공식품');
    
    INSERT INTO V_LPRO
    VALUES(11,'P305','임산물');
    
    DELETE V_LPRO
     WHERE LPROD_ID = 0;
     
    ROLLBACK;     
    COMMIT;