Comment créer une procédure stockée ? ( MySQL, SQL )

Publié le 17 mars 2010 par Mr32

Une procédure stockée est un ensemble d'instructions SQL pré-compilées stockées sur le serveur de base de données.

L'intérêt réside surtout dans la rapidité en évitant les échanges avec le client, et la simplification du code lors de l'appel.

Voici un exemple qui contrôle le stock de produits disponible et qui réajuste automatiquement la table des quantités si cette dernière est supérieure au stock disponible :

delimiter |

DROP PROCEDURE IF EXISTS CHECK_STOCKS |
CREATE PROCEDURE CHECK_STOCKS(p_order_id INT)
BEGIN
	DECLARE v_done INT DEFAULT 0;
	DECLARE v_o_p_id, v_quantity, v_stock INT;
	DECLARE v_cur1 CURSOR FOR
		SELECT opt.o_p_id , opt.o_p_quantity , p.product_stock
		FROM order_products_tmp opt , products p
		WHERE opt.order_id = p_order_id AND p.product_id = opt.product_id;
	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET v_done = 1;

	OPEN v_cur1;

	REPEAT
		FETCH v_cur1 INTO v_o_p_id, v_quantity, v_stock;
		IF NOT v_done THEN
			IF v_stock <= 0 THEN
				DELETE FROM order_products_tmp WHERE o_p_id = v_o_p_id LIMIT 1;
			ELSEIF v_quantity > v_stock THEN
				UPDATE order_products_tmp SET o_p_quantity = v_stock WHERE o_p_id = v_o_p_id LIMIT 1;
			END IF;
		END IF;
	UNTIL v_done END REPEAT;

	CLOSE v_cur1;
END
|

Ensuite, il suffit d'exécuter la requête SQL dans phpMyAdmin (les dernières versions supportant le délimiteur DELIMITER).

Pour appeler la procédure stockée, vous devez exécuter la commande CALL.

CALL CHECK_STOCKS(32);