DROP FUNCTION
DROP FUNCTION elimina una función almacenada de la base de datos. Una vez eliminada, todas las consultas y procedimientos que la usen dejarán de funcionar.
Sintaxis
-- Eliminar una función
DROP FUNCTION nombre_funcion;
-- Eliminar si existe (evita error)
DROP FUNCTION IF EXISTS nombre_funcion;Ejemplo básico
-- Crear una función
DELIMITER //
CREATE FUNCTION fn_test()
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
RETURN 'Hola MySQL';
END //
DELIMITER ;-- Verificar
SELECT fn_test();| fn_test |
|---|
| Hola MySQL |
-- Eliminar
DROP FUNCTION fn_test;
-- Intentar usarla genera error
-- SELECT fn_test();
-- Error: FUNCTION tienda_mysql.fn_test does not existIF EXISTS
-- Sin IF EXISTS: error si no existe
-- DROP FUNCTION fn_inexistente;
-- Error: FUNCTION tienda_mysql.fn_inexistente does not exist
-- Con IF EXISTS: solo warning
DROP FUNCTION IF EXISTS fn_inexistente;
-- Query OK, 0 rows affected, 1 warningVerificar dependencias antes de eliminar
Antes de eliminar una función, verifica si está siendo usada:
-- Buscar en procedimientos que podrían usar la función
SELECT ROUTINE_NAME, ROUTINE_TYPE
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = 'tienda_mysql'
AND ROUTINE_DEFINITION LIKE '%fn_precio_con_iva%';-- Buscar en vistas
SELECT TABLE_NAME
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = 'tienda_mysql'
AND VIEW_DEFINITION LIKE '%fn_precio_con_iva%';Permisos necesarios
Para eliminar una función necesitas:
- Privilegio
ALTER ROUTINE, o - Ser el DEFINER de la función
DROP FUNCTION vs DROP PROCEDURE
| Comando | Elimina |
|---|---|
| DROP FUNCTION | Funciones almacenadas |
| DROP PROCEDURE | Procedimientos almacenados |
No son intercambiables. Si intentas eliminar una función con DROP PROCEDURE, obtendrás un error.
Patrón para actualizar funciones
MySQL no tiene ALTER FUNCTION para cambiar el cuerpo. El patrón es eliminar y recrear:
-- 1. Guardar definición actual
SHOW CREATE FUNCTION fn_precio_con_iva\G
-- 2. Eliminar
DROP FUNCTION IF EXISTS fn_precio_con_iva;
-- 3. Recrear con cambios
DELIMITER //
CREATE FUNCTION fn_precio_con_iva(precio DECIMAL(10,2))
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
-- Nuevo IVA del 22%
RETURN ROUND(precio * 1.22, 2);
END //
DELIMITER ;En el siguiente artículo veremos una comparación detallada entre funciones y procedimientos.
Escrito por Eduardo Lázaro
