2014-04-01 3 views
2

구체화 된보기의 목록이 있습니다. 나는이 모든 뷰를 포함 할 패키지를 만들고 싶다. 필요할 때마다 패키지를 새로 고칠 수있다.많은 구체화 된보기가있는 oracle에 패키지를 생성하는 방법

+0

패키지는 구체화 된보기의 컨테이너가 아닙니다. 아마도 패키지가 아닌 새로 고침 그룹을 만드는 방법을 묻는 것입니까? –

+0

예 새로 고침 그룹을 만들고 싶지만 클라이언트에서 모든 구체화 된 뷰를 새로 고치는 절차가있는 패키지를 만들어달라고 요청했습니다. –

+1

새로 고침 그룹 및 해당 새로 고침 그룹을 새로 고치는 패키지 된 프로 시저를 만드시겠습니까? 또는 각 구체화 된 뷰를 차례로 새로 고치는 패키지 된 프로 시저를 만들려고합니까? 모든 구체화 된 뷰가 트랜잭션 적으로 서로 일관성이 있어야합니까? 또는 모두 독립적으로 새로 고칠 수 있습니까? –

답변

2

내가 만든 다음과 같은 패키지 :

---- Creating specification 
CREATE OR REPLACE PACKAGE SM_OWN.mv_refr_pkg 
IS 
     PROCEDURE PROC_MV_REFRESH; 

END mv_refr_pkg; 
/

---- Creating BODY 
CREATE OR REPLACE PACKAGE BODY SM_OWN.mv_refr_pkg 
IS 

PROCEDURE PROC_MV_REFRESH 
IS 
BEGIN 

FOR mv_name IN 
    (SELECT NAME 
    FROM sys.dba_dependencies 
    WHERE OWNER = 'SM_OWN' 
    AND referenced_name='SM_TRANSFER' 
    AND TYPE='MATERIALIZED VIEW') 

     LOOP 
       DBMS_OUTPUT.PUT_LINE(systimestamp || ' Refreshing materialized view SM_OWN.'||mv_name.Name); 
       DBMS_SNAPSHOT.REFRESH('SM_OWN.'||mv_name.Name); 
     END LOOP; 

END PROC_MV_REFRESH; 
END; 
/


How to Run: 
set serveroutput on ; 
execute SM_OWN.mv_refr_pkg.PROC_MV_REFRESH; 
1

스키마의 모든 mview를 새로 고치는 코드를 만들겠습니까?

뭔가

Create procedure mv_ref is 
begin 
for i in (select mview_name from user_mviews) loop 
    dbms_mview.(i.mview_name,'f'); -- or whatever method you use 
end loop; 
end; 
나는 오라클이 여기에 설치되어 있지 않은

같은 - 그래서 컴파일하지 않는 경우, 당신은 그것에서 아이디어를 얻을 수있을 것입니다 ...

+0

감사합니다. 나는 당신에 의해 언급 된 절차를 작성했습니다. 잘 작동합니다. 이제이 프로 시저를 패키지 내에서 호출하려고합니다. 마지막으로 패키지를 새로 고칠 수 있습니다. –