본문 바로가기

오라클

머트리얼라이즈뷰

-- 머트리얼라이즈뷰

  일반뷰와 달리 실제데이터(통계정보)를 가지고 있으며, 기준이 되는 테이블에

  INSERT, UPDATE, DELETE 가 발생하면 새로운 데이터를 머트리얼라이즈뷰에 반영함 


-- 머트라일라이즈뷰를 위한 권한 설정 : sys 계정

-- QUERY REWRITE 권한 설정 : 쿼리를 다시 작성 할 수 있는 권한

GRANT QUERY REWRITE TO sky(사용자명);


--머트리얼라이즈뷰작성권한설정

GRANT CREATE MATERIALIZED VIEW TO sky(사용자명);


----------------------------------------------------------------------------------------------


-- 머트리얼라이즈 뷰 생성

CREATE MATERIALIZED VIEW pview

  BUILD IMMEDIATE --mview 생성과 동시 데이터생성

  REFRESH -- mview에 데이터를 고치는 시기 방법 결정

    COMPLETE -- mview의 전체데이터가 refresh

    ON DEMAND -- 수동으로 refresh

  ENABLE QUERY REWRITE  -- 이전쿼리를 수정하지 않고 재작성

  AS

    SELECT TO_CHAR(p_date,'YYYY') 년도,

      TO_CHAR(p_date, 'MM')월,

      SUM(p_su*price) 월별판매금액

    FROM panmai p

    JOIN danga d ON p.b_id=d.b_id

    GROUP BY TO_CHAR(p_date, 'YYYY'),

      TO_CHAR(p_date,'MM');

      

      SELECT * FROM tab;

      

  INSERT INTO panmai(id, g_id, b_id, p_date, p_su) VALUES (11,6, 'b-1', '2011-05-05',20);

    

  COMMIT;

  

  SELECT * FROM panmai; --여기에는 새로운 데이타가 있다.

  

  SELECT * FROM pview; --여기에는 새로운 데이타가 없다.

  --=> ON DEMAND 떄문에 수동으로 refresh 해야 한다.

  

-- 수동으로 쿼리를 재실행

EXEC DBMS_MVIEW.REFRESH('pview');


SELECT * FROM pview; -- 이제 새로운 데이타가 존재한다.


--MATERIALIZED View 제거

DROP MATERIALIZED VIEW pview;


SELECT * FROM tab;


--자동으로 재실행되는 MATERIALIZED view 작성(위와 달리 자동으로 refresh하게 만듬)

CREATE MATERIALIZED VIEW pview

  BUILD IMMEDIATE --mview 생성과 동시 데이터생성

  REFRESH -- mview에 데이터를 고치는 시기 방법 결정

    COMPLETE -- mview의 전체데이터가 refresh

    ON COMMIT -- 자동으로 refresh

  ENABLE QUERY REWRITE  -- 이전쿼리를 수정하지 않고 재작성

  AS

    SELECT TO_CHAR(p_date,'YYYY') 년도,

      TO_CHAR(p_date, 'MM')월,

      SUM(p_su*price) 월별판매금액

    FROM panmai p

    JOIN danga d ON p.b_id=d.b_id

    GROUP BY TO_CHAR(p_date, 'YYYY'),

      TO_CHAR(p_date,'MM');


SELECT * FROM pview;


  INSERT INTO panmai(id, g_id, b_id, p_date, p_su) VALUES (12,6, 'b-1', '2012-05-05',20);

    

COMMIT;


SELECT * FROM panmai;


SELECT * FROM pview;--ON DEMAND가 아닌 COMMIT 이라서 바로 반영이 되있는것을 확인가능


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

Stored Function(사용자 함수) - 펑션  (0) 2013.06.06
오라클 SEQUENCE  (0) 2013.06.06
오라클 VIEW 뷰  (0) 2013.06.06
상관하위부 질의  (0) 2013.06.06
프로시져의 SYS_REFCURSOR 예제  (0) 2013.06.05