Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como gerar DDL programaticamente do banco de dados Oracle?


O pacote DBMS_METADATA (supondo que você esteja em uma versão razoavelmente recente do Oracle) gerará o DDL para qualquer objeto no banco de dados. então
SELECT dbms_metadata.get_ddl( 'TABLE', 'TABLEA', 'SCHEMAA' )
  FROM dual;

retornará um CLOB com o DDL para SchemaA.TableA. Você pode pegar a exceção lançada de que o objeto não existe, mas sugiro que você consulte o dicionário de dados (ou seja, DBA_OBJECTS) para verificar se existe uma tabela chamada TableA no SchemaA, ou seja,
SELECT COUNT(*) 
  FROM dba_objects
 WHERE owner = 'SCHEMAA'
   AND object_name = 'TABLEA'
   AND object_type = 'TABLE'

Observe que, se você não tiver acesso a DBA_OBJECTS, poderá usar ALL_OBJECTS. A preocupação lá, no entanto, é que pode haver uma TableA no SchemaA na qual você não tenha acesso SELECT. Essa tabela não apareceria em ALL_OBJECTS (que possui todos os objetos aos quais você tem acesso), mas apareceria em DBA_OBJECTS (que possui todos os objetos no banco de dados, independentemente de sua capacidade de acessá-los).

Você pode gravar o DDL em um arquivo ou, se a contagem for 0, indicar que o objeto não existe. A partir de um procedimento armazenado, você pode usar o pacote UTL_FILE para gravar em um arquivo no servidor de banco de dados. Se você estiver tentando gravar em um arquivo no sistema de arquivos do cliente, precisará usar um idioma que tenha acesso aos recursos do sistema operacional do cliente. Um pequeno programa C/Java/Perl/etc. deve ser capaz de selecionar um CLOB e gravar esses dados em um arquivo no sistema operacional cliente.