DBMS_METADATA: Recuperação de Metadados em PL/SQL
Introdução
O pacote DBMS_METADATA
é uma parte poderosa e versátil do Oracle Database, que permite a recuperação programática de metadados do banco de dados. É um recurso muito útil para situações onde é necessário extrair informações sobre a estrutura do banco de dados, como tabelas, índices, restrições e muito mais. Neste artigo, exploraremos as funcionalidades do DBMS_METADATA
com exemplos práticos para mostrar como você pode tirar proveito deste pacote.
Pré-requisitos
- Oracle Database instalado
- Conhecimento básico em PL/SQL
Permissões Necessárias
Para usar o pacote DBMS_METADATA
, o usuário deve ter a permissão SELECT_CATALOG_ROLE
ou ser um usuário com privilégios administrativos. Se você não tem certeza se tem esses privilégios, você pode consultar o DBA (Database Administrator) para mais informações.
-- Para conceder o papel
GRANT SELECT_CATALOG_ROLE TO seu_usuario;
Funções Básicas
DBMS_METADATA.GET_DDL
A função GET_DDL
é usada para recuperar o DDL (Data Definition Language) para um objeto de banco de dados. Veja um exemplo simples de como extrair o DDL de uma tabela.
DECLARE
ddl_text CLOB;
BEGIN
ddl_text := DBMS_METADATA.GET_DDL('TABLE','EMPLOYEE');
DBMS_OUTPUT.PUT_LINE(ddl_text);
END;
/
DBMS_METADATA.GET_DEPENDENT_DDL
A função GET_DEPENDENT_DDL
é usada para recuperar o DDL de objetos que são dependentes de um objeto de banco de dados específico. Por exemplo, para recuperar todos os índices de uma tabela.
DECLARE
ddl_text CLOB;
BEGIN
ddl_text := DBMS_METADATA.GET_DEPENDENT_DDL('INDEX','EMPLOYEE');
DBMS_OUTPUT.PUT_LINE(ddl_text);
END;
/
Extraindo Metadados em Formatos Específicos
Para extrair metadados em formatos específicos, como XML, você pode usar a função DBMS_METADATA.SET_TRANSFORM_PARAM
.
DECLARE
ddl_text CLOB;
BEGIN
DBMS_METADATA.SET_TRANSFORM_PARAM (DBMS_METADATA.SESSION_TRANSFORM,'PRETTY', TRUE);
DBMS_METADATA.SET_TRANSFORM_PARAM (DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR', TRUE);
DBMS_METADATA.SET_TRANSFORM_PARAM (DBMS_METADATA.SESSION_TRANSFORM, 'FORMAT', 'XML');
ddl_text := DBMS_METADATA.GET_DDL('TABLE','EMPLOYEE');
DBMS_OUTPUT.PUT_LINE(ddl_text);
END;
/
Extraindo Metadados de Vários Objetos
Para extrair metadados de vários objetos, você pode usar o cursor.
DECLARE
ddl_cursor DBMS_METADATA.METADATA_HANDLE;
ddl_text CLOB;
BEGIN
ddl_cursor := DBMS_METADATA.OPEN('TABLE');
DBMS_METADATA.SET_FILTER(ddl_cursor,'SCHEMA','HR');
LOOP
ddl_text := DBMS_METADATA.FETCH_CLOB(ddl_cursor);
EXIT WHEN ddl_text IS NULL;
DBMS_OUTPUT.PUT_LINE(ddl_text);
END LOOP;
DBMS_METADATA.CLOSE(ddl_cursor);
END;
/
Conclusão
O pacote DBMS_METADATA
no Oracle Database oferece uma gama extensiva de funcionalidades para a recuperação de metadados. De simples DDLs a informações dependentes e formatos personalizados, ele oferece uma abordagem programática e altamente customizável para interagir com o seu esquema de banco de dados. Experimente as funções e ajuste as opções para adaptá-las às suas necessidades específicas.
Abs
Referências
- Oracle Database PL/SQL Packages and Types Reference – DBMS_METADATA: Oracle Documentation
- Oracle Base – DBMS_METADATA