ORACLE: Ermittlung DDL-Statements für alle Tabellen eines Users/Schematas

MOD0815

Grünschnabel
Hallo,
ich möchte mit einer Abfrage die DDL-Statements für alle Tabellen generieren, die einem USER gehören.

Mit DESC bekomme ich nur den Aufbau angezeigt, nicht jedoch das DDL-Statement.

Need Help!

Thx.
 
dazu gibt's das Package dbms_metadata:
In sqlplus:
Code:
set long 100000
set longchunksize 10000
select dbms_metadata.get_ddl('TABLE', 'TEST') ddl from dual;

SQL> r
  1  select dbms_metadata.get_ddl('TABLE', 'TEST') ddl
  2*   from dual

DDL
----------------------------------------------------------------------------------------------------------------


  CREATE TABLE "DBADMIN"."TEST"
   (    "RN" NUMBER,
        "PAD" VARCHAR2(100)
   ) SEGMENT CREATION IMMEDIATE
  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)
  TABLESPACE "TEST_TS"

-- für alle Tabellen des Users
select dbms_metadata.get_ddl('TABLE', table_name) ddl
  from user_tables
Für Indizes und Constraints funktioniert das gleiche Verfahren (mit entsprechender Typangabe und Verwendung der passenden data dictionary Views).

Alternativ kann man DDL-Informationen für komplette Schemata auch über die Tools exp/imp bzw. expdp und impdp erzeugen

Eine hübsche Lösung liefert außerdem Carsten Czarski unter http://sql-plsql-de.blogspot.com/2007/07/skripte-generieren-dbmsmetadata.html

Gruß

MPr
 
Zurück