DROP PROCEDURE

DROP PROCEDURE elimina un procedimiento almacenado de la base de datos. Una vez eliminado, no se puede recuperar a menos que tengas un respaldo de la definición.

Sintaxis

-- Eliminar un procedimiento
DROP PROCEDURE nombre_procedimiento;
 
-- Eliminar si existe (evita error)
DROP PROCEDURE IF EXISTS nombre_procedimiento;

Ejemplo básico

-- Crear un procedimiento
DELIMITER //
 
CREATE PROCEDURE sp_test()
BEGIN
    SELECT 'Hola mundo' AS mensaje;
END //
 
DELIMITER ;
-- Verificar que existe
CALL sp_test();
mensaje
Hola mundo
-- Eliminar
DROP PROCEDURE sp_test;
 
-- Intentar llamarlo genera error
-- CALL sp_test();
-- Error: PROCEDURE tienda_mysql.sp_test does not exist

IF EXISTS

-- Sin IF EXISTS: error si no existe
-- DROP PROCEDURE sp_inexistente;
-- Error: PROCEDURE tienda_mysql.sp_inexistente does not exist
 
-- Con IF EXISTS: solo warning
DROP PROCEDURE IF EXISTS sp_inexistente;
-- Query OK, 0 rows affected, 1 warning
 
SHOW WARNINGS;
LevelCodeMessage
Note1305PROCEDURE tienda_mysql.sp_inexistente does not exist

Verificar antes de eliminar

-- Listar todos los procedimientos
SHOW PROCEDURE STATUS WHERE Db = 'tienda_mysql';
-- Buscar un procedimiento específico
SELECT ROUTINE_NAME, CREATED, LAST_ALTERED
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = 'tienda_mysql'
AND ROUTINE_TYPE = 'PROCEDURE'
AND ROUTINE_NAME = 'sp_test';

Guardar definición antes de eliminar

-- Ver la definición completa
SHOW CREATE PROCEDURE nombre_procedimiento\G

Guarda la salida antes de eliminar si podrías necesitar recrear el procedimiento.

Permisos necesarios

Para eliminar un procedimiento necesitas el privilegio ALTER ROUTINE en el procedimiento o en la base de datos:

-- Verificar permisos
SHOW GRANTS FOR CURRENT_USER();

Eliminar y recrear

Un patrón común es eliminar y recrear para actualizar un procedimiento:

DROP PROCEDURE IF EXISTS sp_productos_activos;
 
DELIMITER //
 
CREATE PROCEDURE sp_productos_activos()
BEGIN
    SELECT nombre, precio, stock
    FROM productos
    WHERE activo = TRUE
    ORDER BY nombre;
END //
 
DELIMITER ;

Este patrón es útil en scripts de migración. Sin embargo, CREATE OR REPLACE no existe para procedimientos en MySQL, a diferencia de las vistas.

DROP PROCEDURE vs DROP FUNCTION

ComandoElimina
DROP PROCEDUREProcedimientos almacenados
DROP FUNCTIONFunciones almacenadas

No son intercambiables: DROP PROCEDURE no puede eliminar una función y viceversa.

En el siguiente artículo veremos cómo modificar las características de un procedimiento con ALTER PROCEDURE.

Escrito por Eduardo Lázaro