-- 머트리얼라이즈뷰
일반뷰와 달리 실제데이터(통계정보)를 가지고 있으며, 기준이 되는 테이블에
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 |