Как программно генерировать DDL из базы данных Oracle? - PullRequest
5 голосов
/ 12 ноября 2010

У меня сложная задача - найти несколько таблиц из огромной схемы и сгенерировать DDL для этих таблиц.

Скажем, у меня schemaA есть 1000 таблиц, мне нужно найти, существует ли tableA в этом schemaA, если он есть, сгенерировать DDL и сохранить его в файловой системе, если нет распечатайте его имя или запишите в файл. Есть идеи?

1 Ответ

16 голосов
/ 12 ноября 2010

Пакет DBMS_METADATA (при условии, что вы используете достаточно свежую версию Oracle) сгенерирует DDL для любого объекта в базе данных.Поэтому

SELECT dbms_metadata.get_ddl( 'TABLE', 'TABLEA', 'SCHEMAA' )
  FROM dual;

вернет CLOB с DDL для SchemaA.TableA.Вы можете поймать исключение, которое выдается, что объект не существует, но я бы посоветовал вам запросить словарь данных (например, DBA_OBJECTS), чтобы убедиться, что в SchemaA есть таблица с именем TableA, то есть

SELECT COUNT(*) 
  FROM dba_objects
 WHERE owner = 'SCHEMAA'
   AND object_name = 'TABLEA'
   AND object_type = 'TABLE'

Обратите внимание, что если у вас нет доступа к DBA_OBJECTS, вы можете вместо этого использовать ALL_OBJECTS.Однако проблема заключается в том, что в SchemaA может быть таблица A, к которой у вас нет доступа SELECT.Эта таблица не будет отображаться в ALL_OBJECTS (в которой есть все объекты, к которым у вас есть доступ), но она будет отображаться в DBA_OBJECTS (в которой есть все объекты в базе данных независимо от вашей возможности доступа к ним).

ВыЗатем можно либо записать DDL в файл, либо, если счетчик равен 0, указать, что объект не существует.Из хранимой процедуры вы можете использовать пакет UTL_FILE для записи в файл на сервере базы данных.Если вы пытаетесь записать файл в файловой системе клиента, вам нужно будет использовать язык, который имеет доступ к ресурсам операционной системы клиента.Небольшая программа на C / Java / Perl / и т.д. должна иметь возможность выбирать CLOB и записывать эти данные в файл в операционной системе клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...