Главная > Oracle e-Business Suite > Генерация DDL для объектов БД


Генерация DDL для объектов БД

Начиная с Oracle 9i появился пакет DBMS_METADATA, который позволяет пользователям получать метаданные о любых объектах (таблицах, индексах, процедурах и т.д.) всего лишь за одно обращение.



1) GET_DDL — возвращает метаданные объъекта как DDL

SELECT object_type,
       object_name,
       dbms_metadata.get_ddl(object_type, object_name, owner) as ddl_code
  FROM dba_objects t
 WHERE t.object_type = 'TABLE'
   and rownum <= 10;


Рассмотрим подробнее

SQL> set pagesize 0
SQL> set long 90000
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') FROM DUAL;

  CREATE TABLE "SCOTT"."EMP"
   (	"EMPNO" NUMBER(4,0) NOT NULL ENABLE,
	"ENAME" VARCHAR2(10),
	"JOB" VARCHAR2(9),
	"MGR" NUMBER(4,0),
	"HIREDATE" DATE,
	"SAL" NUMBER(7,2),
	"COMM" NUMBER(7,2),
	"DEPTNO" NUMBER(2,0),
	 CONSTRAINT "EMP_VALID_JOB" CHECK (job in ('CLERK','SALESMAN','MANAGER','ANALYS
	 PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 106496 NEXT 106496 MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 100 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
  TABLESPACE "SYSTEM"  ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 106496 NEXT 106496 MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 100 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
  TABLESPACE "SYSTEM"

Для того, чтобы не выводить параметры распределения памяти (storage clauses) в выдаваемом SQL DDL, сделаем следующее:

execute DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);

SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') FROM DUAL;

  CREATE TABLE "SCOTT"."EMP"
   (	"EMPNO" NUMBER(4,0) NOT NULL ENABLE,
	"ENAME" VARCHAR2(10),
	"JOB" VARCHAR2(9),
	"MGR" NUMBER(4,0),
	"HIREDATE" DATE,
	"SAL" NUMBER(7,2),
	"COMM" NUMBER(7,2),
	"DEPTNO" NUMBER(2,0),
	 CONSTRAINT "EMP_VALID_JOB" CHECK (job in ('CLERK','SALESMAN','MANAGER','ANALYS
	 PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
  TABLESPACE "SYSTEM"  ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  TABLESPACE "SYSTEM"

Чтобы вернуть параметры сессии по умолчанию, надо выполнить следующую команду:

execute DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');

2) Извлечение DDL-предложений о всех объектных разрешениях (object grants) для таблицы SCOTT.EMP

SQL> SET PAGESIZE 0
SQL> SET LONG 90000
SQL> SELECT DBMS_METADATA.GET_DEPENDENT_DDL('OBJECT_GRANT', 'EMP', 'SCOTT') FROM DUAL;

  GRANT DELETE, INSERT, SELECT, UPDATE ON "SCOTT"."EMP" TO PUBLIC

Похожие записи:

  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.