1
resposta

Como usar Procedure para executar comandos dinamicamente no MYSQL 5.6

Eu fiz uma procedure para deletar trigger dinamicamente, mas não funciona, dá erro de: This command is not supported in the prepared statement protocol yet

Descobri na documentação que o PREPARE não funciona para DROP TRIGGER https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html

Se não posso usar o PREPARE, como consigo executar um STRING dentro de uma procedure com comando MYSQL dentro? Lembrando que ele precisar executar uma string, pois irei montar dinamicamente a string com algumas variáveis/parametros.

No exemplo abaixo estou colocando explicitamente o nome de uma trigger para ficar mais limpo o código sem passagem de parametros para conseguir ajuda.

DROP procedure IF EXISTS  sp_gerar_trigger_inicial_db;

CREATE PROCEDURE sp_gerar_trigger_inicial_db()
    BEGIN
        SET @query = 'DROP TRIGGER IF EXISTS tbi_acessos';
        PREPARE stmt from @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END;

call sp_gerar_trigger_inicial_db();

Estou usando MYSQL 5.6,

1 resposta

Oi Maicon,

Dá para executar normalmente o comando com a String dinamica dentro dele.

O problema é que não pode ser um comando do tipo drop trigger, pois não é suportado =/