2011-08-18 4 views
8

다음 SQL을 사용하면 주어진 구체화 된보기에 대한 DDL을 얻을 수 있습니다.Materialized View DDL에서 테이블 공간 정보 제거 DDL

BEGIN 
    DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', FALSE); 
    DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'TABLESPACE', FALSE); 
    DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', FALSE); 
END; 
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', 'OBJECT_NAME', 'SCHEMA_NAME') FROM DUAL; 

테이블 공간 정보없이 DDL을 검색하는 데 문제가 있습니다. SET_TRANSFORM_PARAM 지시문은 실제로 테이블 및 색인 (구체화 된보기가 아님)에 특정한 것으로 문서화됩니다. 실제로는는 실제로 작동하지만, TABLESPACESEGMENT_ATTRIBUTES은 효과가 없습니다. 생성 된 DDL에서 테이블 공간 정보를 생략 할 수있는 방법이 있습니까?

+0

어디에서 코드를 실행하고 있으며 출력은 어떻게 생깁니 까? –

답변

6

SET_TRANSFORM_PARAM에 대한 호출에서 object_type을 MATERIALIZED_VIEW로 설정해야합니다. 아래 예에서 테이블 스페이스는 언급되지 않았습니다.

create materialized view mv 
as select * from large_t where rownum < 100; 

begin DBMS_METADATA.SET_TRANSFORM_PARAM (
       transform_handle => dbms_metadata.session_transform, 
       name    => 'TABLESPACE', 
       value   => false, 
       object_type  => 'MATERIALIZED_VIEW'); 
end; 
/

select dbms_metadata.get_ddl(
      'MATERIALIZED_VIEW', 
      'MV', 
      user) 
     from dual; 

CREATE MATERIALIZED VIEW "SODONNEL"."MV" ("OWNER", "OBJECT_NAME", "SUBOBJECT_NAME", "OBJECT_ID", "DATA_OBJECT_ID", "OBJECT_TYPE", "CREATED", "LAST_DDL_TIME", "TIMESTAMP", "STATUS", "TEMPORARY", "GENERATED", "SECONDARY", "NAMESPACE", "EDITION_NAME") 
    ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING 
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 
    BUILD IMMEDIATE 
    USING INDEX 
    REFRESH FORCE ON DEMAND 
    USING DEFAULT LOCAL ROLLBACK SEGMENT 
    USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE 
    AS select * from large_t where rownum < 100