Vamos por el principio: Una STORED FUNTION es na rutina que recibe parámetros sólo de entrada y retorna un único valor. ç¿Eso está claro, no?
Bueno, como rutina almacenada tiene como restricción que habitualmente resuelve alguna situación sin necesidad de leer tablas. En ese sentido, por lo general, si quisieras poner un SELECT a una tabla, éste debería dar error al cargar la function, pero habitualmente no lo hace.
De todos modos eso puede pasar si quieres restaurar la function en un backup de la base: da un error de rutina.
La cosa es fácil: la sintaxis debe incluir dentro de su encabezado la cláusula READS SQL DATA de esta forma:
Código sql:
Ver originalDELIMITER $$
DROP FUNCTION IF EXISTS check_template$$
CREATE FUNTION check_template(id INT) RETURNS INTEGER
READS SQL DATA
BEGIN
DECLARE tema INT DEFAULT 0;
SELECT predeterminado INTO tema FROM THEMES WHERE id_theme=id;
RETURN tema;
END$$
DELIMITER ;
Esto recibe un valor de id, y devuelve el contenido del campo `predeterminado` o NULL si no existe.
¿Esa sería la idea?