Pular para o conteúdo

Introdução ao DBMS_DDL no Oracle

Introdução ao DBMS_DDL no Oracle

O pacote DBMS_DDL no Oracle 19c fornece um conjunto de procedimentos e funções que permitem executar comandos DDL (Data Definition Language) dentro de blocos PL/SQL. Com ele, é possível criar, alterar e excluir objetos de banco de dados de forma programática. Este artigo explora o uso do DBMS_DDL, apresentando exemplos práticos e destacando suas funcionalidades principais.

O Que é DBMS_DDL?

DBMS_DDL é um pacote PL/SQL que oferece uma interface para executar comandos DDL em um ambiente PL/SQL. Ele é particularmente útil em situações onde há necessidade de criar ou modificar objetos de banco de dados dinamicamente, por exemplo, em aplicações que exigem a criação de tabelas temporárias ou esquemas personalizados para diferentes usuários.

Funcionalidades do DBMS_DDL

  • Execução de DDL Dinâmico: Permite a execução de comandos DDL dinamicamente dentro de blocos PL/SQL.
  • Recompilação de Objetos: Facilita a recompilação de objetos de banco de dados, como pacotes, funções e procedimentos.
  • Manipulação de Identificadores: Inclui funcionalidades para gerar identificadores de objetos de banco de dados.

Exemplos Práticos

Exemplo Básico: Criação de uma Tabela Dinamicamente

Vamos começar com um exemplo simples de como criar uma tabela dinamicamente usando o DBMS_DDL.

PLSQL
BEGIN
   DBMS_DDL.EXECUTE_IMMEDIATE('CREATE TABLE employees (
                                employee_id NUMBER,
                                first_name VARCHAR2(50),
                                last_name VARCHAR2(50),
                                hire_date DATE,
                                salary NUMBER
                               )');
END;
/

PL/SQL procedure successfully completed.

Exemplo Básico: Adicionar uma Coluna a uma Tabela

Outro uso básico do DBMS_DDL é adicionar uma nova coluna a uma tabela existente.

PLSQL
BEGIN
   DBMS_DDL.EXECUTE_IMMEDIATE('ALTER TABLE employees ADD (department_id NUMBER)');
END;
/

PL/SQL procedure successfully completed.

Exemplo Mais Complexo: Recompilação de Objetos

Em cenários onde objetos de banco de dados precisam ser recompilados, o DBMS_DDL pode ser utilizado para automatizar essa tarefa.

Passo 1: Criação de um Procedimento Simples

PLSQL
CREATE OR REPLACE PROCEDURE calculate_bonus AS
BEGIN
   DBMS_OUTPUT.PUT_LINE('Calculating bonus...');
END calculate_bonus;
/

Procedure created.

Passo 2: Modificação da Procedure

Vamos alterar a procedure e recompilá-la usando DBMS_DDL.

PLSQL
BEGIN
   DBMS_DDL.EXECUTE_IMMEDIATE('CREATE OR REPLACE PROCEDURE calculate_bonus AS
                               BEGIN
                                  DBMS_OUTPUT.PUT_LINE('Bonus calculated successfully.');
                               END calculate_bonus;');
END;
/

PL/SQL procedure successfully completed.

Passo 3: Recompilação da Procedure

PLSQL
BEGIN
   DBMS_DDL.ALTER_COMPILE('PROCEDURE', 'CALCULATE_BONUS');
END;
/

PL/SQL procedure successfully completed.

Exemplo Avançado: Criação de Tabelas com Nomes Dinâmicos

Vamos criar um exemplo mais complexo onde utilizamos DBMS_DDL para criar tabelas com nomes dinâmicos baseados na data atual.

Passo 1: Criação de um Bloco PL/SQL para Gerar Nomes Dinâmicos

PLSQL
DECLARE
   table_name VARCHAR2(50);
BEGIN
   table_name := 'EMPLOYEES_' || TO_CHAR(SYSDATE, 'YYYYMMDD');
   DBMS_DDL.EXECUTE_IMMEDIATE('CREATE TABLE ' || table_name || ' (
                                employee_id NUMBER,
                                first_name VARCHAR2(50),
                                last_name VARCHAR2(50),
                                hire_date DATE,
                                salary NUMBER
                               )');
   DBMS_OUTPUT.PUT_LINE('Table ' || table_name || ' created successfully.');
END;
/

Table EMPLOYEES_20240721 created successfully.
PL/SQL procedure successfully completed.

Passo 2: Inserção de Dados na Tabela Dinâmica

PLSQL
DECLARE
   table_name VARCHAR2(50);
BEGIN
   table_name := 'EMPLOYEES_' || TO_CHAR(SYSDATE, 'YYYYMMDD');
   DBMS_DDL.EXECUTE_IMMEDIATE('INSERT INTO ' || table_name || ' (employee_id, first_name, last_name, hire_date, salary) 
                              VALUES (1, ''John'', ''Doe'', TO_DATE(''2023-01-15'', ''YYYY-MM-DD''), 50000)');
   DBMS_OUTPUT.PUT_LINE('Data inserted into table ' || table_name || ' successfully.');
END;
/

Data inserted into table EMPLOYEES_20240721 successfully.
PL/SQL procedure successfully completed.

Consultas e Verificação de Tabelas Criadas

Para verificar a tabela criada dinamicamente e os dados inseridos:

SQL
SELECT * FROM employees_20240721;

EMPLOYEE_ID FIRST_NAME LAST_NAME HIRE_DATE  SALARY
----------- ---------- --------- ---------- ------
          1 John       Doe       15-JAN-23  50000

Conclusão

O pacote DBMS_DDL no Oracle 19c é uma ferramenta poderosa que permite a execução dinâmica de comandos DDL dentro de blocos PL/SQL. Suas funcionalidades facilitam a criação, modificação e recompilação de objetos de banco de dados de forma programática, tornando-o indispensável para administradores de banco de dados e desenvolvedores que necessitam de flexibilidade na gestão de objetos de banco de dados.

Abs

Referências

    Giovano Silva

    Giovano Silva

    Giovano Silva é um profissional com mais de 10 anos de experiência em tecnologias Oracle, com ênfase em PL/SQL. Ele adora escrever sobre soluções para problemas comuns enfrentados por profissionais Oracle em seu dia a dia. Seu objetivo é compartilhar conhecimento, simplificar conceitos complexos e ajudar a comunidade Oracle a crescer coletivamente.

    Deixe um comentário

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

    plugins premium WordPress