-- Dentro de sql lo que tenemos es dos maneras -- de incorporar programación: funciones y procedimientos -- ¿Para qué existen? Porque hay veces que queremos hacer cosas -- Y el SQL normal es insuficiente -- Para tareas de mantenimiento, de control, de lógica de negocio -- Por ejemplo yo puedo tener funciones que me sean de utilidad CREATE DEFINER=`root`@`localhost` FUNCTION `inventory_in_stock`(p_inventory_id INT) RETURNS tinyint(1) READS SQL DATA BEGIN DECLARE v_rentals INT; DECLARE v_out INT; #AN ITEM IS IN-STOCK IF THERE ARE EITHER NO ROWS IN THE rental TABLE #FOR THE ITEM OR ALL ROWS HAVE return_date POPULATED SELECT COUNT(*) INTO v_rentals FROM rental WHERE inventory_id = p_inventory_id; IF v_rentals = 0 THEN RETURN TRUE; END IF; SELECT COUNT(rental_id) INTO v_out FROM inventory LEFT JOIN rental USING(inventory_id) WHERE inventory.inventory_id = p_inventory_id AND rental.return_date IS NULL; IF v_out > 0 THEN RETURN FALSE; ELSE RETURN TRUE; END IF; END -- Como utilizaría lo anterior select title,inventory_in_stock(inventory_id) stock from film join inventory on film.film_id=inventory.film_id; -- Otro ejemplo: CREATE DEFINER=`root`@`localhost` FUNCTION `max_rental`() RETURNS int(11) BEGIN DECLARE maximo INT; select max(total) into maximo from ( select count(rental_id) total from rental group by year(rental_date) , month(rental_date) order by total desc ) temp; RETURN maximo; END -- como lo usaría select year(rental_date) anyo, month(rental_date) mes, count(rental_id) total from rental group by anyo,mes having total=max_rental();