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 existIF 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;| Level | Code | Message |
|---|---|---|
| Note | 1305 | PROCEDURE 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\GGuarda 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
| Comando | Elimina |
|---|---|
| DROP PROCEDURE | Procedimientos almacenados |
| DROP FUNCTION | Funciones 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
