[ 2012-03-20 ]

Extract DDL de tablas, indices y vistas con DBMS_METADATA

Es interesante poder obtener las DDL de objetos sin tener que recurrir a varias vistas del diccionario de datos o herramientas gráficas como TOAD, SQL Navigator, etc.

Para esto podemos utilizar la funcion GET_DDL del package DBMS_METADATA.
Veamos un ejemplo de como:

Primero vamos a crear una tabla, un indice y una vista:


SQL> create table T1 (campo1 number, campo2 varchar2(200), campo3 date);

Table created


SQL> alter table T1 add primary key (campo1);

Table altered


SQL> create index IX1_T1 on T1 (campo2);

Index created


SQL> create view V1 as
  2  select * from T1;

View created

Ahora obtendremos las DDL:

Hacemos primero estos seteos de SQL*Plus para que la salida no se corte por la cantidad de caracteres mostrados.

SQL> set long 1000
SQL> set pagesize 0


Pasamos como parámetros el tipo de objeto, el nombre y el esquema:


SQL> select DBMS_METADATA.GET_DDL('TABLE','T1','USUARIO1') from dual;

  CREATE TABLE "USUARIO1"."T1"
   ( "CAMPO1" NUMBER,

"CAMPO2" VARCHAR2(200),

"CAMPO3" DATE,

PRIMARY KEY ("CAMPO1")

  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  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 "USUARIO1"  ENABLE
   ) 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 "USUARIO1_TBS"


SQL> select DBMS_METADATA.GET_DDL('INDEX','IX1_T1','USUARIO1') from dual;

  CREATE INDEX "USUARIO1"."IX1_T1" ON "USUARIO1"."T1" ("CAMPO2")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  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 "USUARIO1_TBS"


SQL> select DBMS_METADATA.GET_DDL('VIEW','V1','USUARIO1') from dual;

  CREATE OR REPLACE FORCE VIEW "USUARIO1"."V1" ("CAMPO1", "CAMPO2", "CAMPO3") AS
  select "CAMPO1","CAMPO2","CAMPO3" from T1


Espero haya quedado claro y les resulte útil.

Ref. http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_metada.htm#BGBBIEGA

No hay comentarios:

Publicar un comentario