En MySQL, una función almacenada (FUNCTION) devuelve un solo valor, por lo que no se puede realizar directamente una inserción (INSERT). Sin embargo, se puede usar la función dentro de una consulta INSERT INTO.
DELIMITER //
CREATE FUNCTION obtener_valor()
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
RETURN 'Hola desde la función';
END //
DELIMITER ;
INSERT INTO
INSERT INTO mi_tabla (columna1) VALUES (obtener_valor());
PROCEDURE)
Si se necesita insertar directamente desde una función almacenada, la mejor opción es usar un procedimiento almacenado (PROCEDURE) en lugar de una FUNCTION:
DELIMITER //
CREATE PROCEDURE insertar_valor()
BEGIN
INSERT INTO mi_tabla (columna1) VALUES ('Valor insertado desde el procedimiento');
END //
DELIMITER ;
CALL insertar_valor();
Jorge García
Fullstack developer