Entfernen Sie die Tabellenbereichsinformationen aus der DDL für die materialisierte view

Mit dem folgenden SQL kann die DDL für eine bestimmte materialisierte view abgerufen werden.

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; 

Ich habe Schwierigkeiten beim Abrufen der DDL ohne die Tablespace-Informationen. Die SET_TRANSFORM_PARAM Direktiven sind tatsächlich als spezifisch für Tabellen und Indizes (nicht materialisierte viewen) dokumentiert. Das STORAGE funktioniert tatsächlich, während die TABLESPACE und SEGMENT_ATTRIBUTES keine Wirkung haben. Gibt es eine Möglichkeit, die Tablespace-Informationen aus der generierten DDL wegzulassen?

Sie müssen den objecttyp in den Aufrufen von SET_TRANSFORM_PARAM auf MATERIALIZED_VIEW festlegen. In meinem Beispiel unten wird der Tablespace nicht erwähnt:

 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