Picture of Roberto Sobrinho
Roberto Sobrinho

10/05/2024

Guia Rápido: Executando Comandos DDL Dinâmicos no Oracle com EXECUTE IMMEDIATE

Olá DBAs! Hoje vou mostrar como uso o EXECUTE IMMEDIATE para realizar operações avançadas no Oracle Database. O comando EXECUTE IMMEDIATE no Oracle Database é como uma ferramenta multifuncional para os desenvolvedores e DBAs. Ele permite que você crie scripts que se ajustam às necessidades específicas do momento, o que torna o trabalho com o banco de dados muito mais flexível e adaptável. Seja para criar tabelas novas, alterar estruturas existentes ou remover objetos desnecessários.

Digamos que você quer criar uma tabela nova.

BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE APP.TBL_NOVA (id NUMBER, desc VARCHAR2(50))';
END;

E pronto, a tabela APP.TBL_NOVA está pronta e disponível para ser usada.

Agora, se você quer adicionar uma coluna nova em uma tabela existente, é só fazer isso:

DECLARE
    v_coluna VARCHAR2(30) := 'endereco';
    v_tipo   VARCHAR2(25) := 'VARCHAR2(100)';
BEGIN
    EXECUTE IMMEDIATE 'ALTER TABLE APP.TBL_NOVA ADD (' || v_coluna || ' ' || v_tipo || ')';
END;

E se precisar excluir algumas tabelas que não usa mais?
No exemplo abaixo vamos excluir todas as tabelas que o nome seja iniciado por BKP:

DECLARE
    v_prefixo VARCHAR2(30) := 'BKP';
BEGIN
    FOR rec IN (SELECT table_name FROM user_tables WHERE table_name LIKE v_prefixo || '%') 
	LOOP
        EXECUTE IMMEDIATE 'DROP TABLE ' || rec.table_name;
    END LOOP;
END;

E o mais legal é que você pode colocar isso tudo dentro de um procedimento para usar quando quiser.

CREATE OR REPLACE PROCEDURE PRC_CREATE_TABLE_DIN
(p_nome IN VARCHAR2, p_colunas IN VARCHAR2) 
AS
BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE ' || p_nome_tabela || ' (' || p_colunas || ')';
END;

Aí é só chamar o procedimento e passar os parâmetros:

BEGIN
    PRC_CREATE_TABLE_DIN('TBL_NOVA_PROC', 'id NUMBER, nome VARCHAR2(50), email VARCHAR2(100)');
END;

Dicas Rápidas

  • Teste Antes de Executar: Sempre teste seus comandos EXECUTE IMMEDIATE em um ambiente de desenvolvimento antes de colocar em produção.
  • Use Bind Variables: Para evitar injeção de SQL e melhorar a performance, use variáveis de ligação (bind variables) sempre que possível.
  • Trate Exceções: Sempre inclua tratamento de exceções para lidar com erros que podem ocorrer durante a execução dinâmica.
  • Limite o Uso: Use EXECUTE IMMEDIATE apenas quando necessário. Em muitos casos, comandos SQL estáticos são mais seguros e eficientes.
  • Segurança é Prioridade: Nunca construa strings SQL dinâmicas diretamente com entradas do usuário, isso pode ser considerado como vulnerabilidade de segurança.

Com essas dicas, você já tem um bom ponto de partida para usar o EXECUTE IMMEDIATE com mais confiança e segurança. Lembre-se de que a prática leva à perfeição, então não deixe de experimentar e aprender mais sobre esse recurso poderoso. 🚀🚀🚀

Compartilhe

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print

Pesquisar

Roberto Sobrinho

Sou Roberto Fernandes Sobrinho, também conhecido como Sobrinho DBA , pós graduado em “Architecture and Database Administration”, entusiasta, dedicado e com 20 anos de experiência com Oracle Database e suas diversas distribuições e variações.

Oracle ACE Associate

2025

Specialist

Exadata Database Machine X9M

Professional

Oracle Database Administration

Professional

Oracle Database 19c: RAC, ASM, & Grid Infra Administrator

Professional

Oracle Autonomous Database Cloud

Professional

Oracle Cloud Database Migration and Integration

Professional

Oracle Database PL/SQL Developer

Associate

Oracle Cloud Infrastructure Architect

Associate

Oracle Cloud Infrastructure Foundations

Categorias

Categorias

Tags

Guia Rápido: Executando Comandos DDL Dinâmicos no Oracle com EXECUTE IMMEDIATE