Les procédures stockées, ce n'est pas si sorcier que ça et il suffit de s'y mettre, avec la pratique, on finit par se simplifier pas mal la vie.
Voici un exemple de base que j'utilise dans l'applicatin sur laquelle je travaille actuellement :
-- On modifie le délimiteur de requêtes pour pouvoir utiliser le délimiteur normal « ; »
DELIMITER //
-- Création de la procédure
CREATE PROCEDURE pr_addUtilisateur(IN id_utilisateur INT UNSIGNED)
BEGIN
DECLARE i, j, nb_perm, nb_ress, perm_id, ress_id INT;
DECLARE perms CURSOR FOR SELECT DISTINCT(prm_id) FROM t_permissions_prm;
DECLARE ress CURSOR FOR SELECT DISTINCT(res_id) FROM t_ressources_res;
SELECT COUNT(*) INTO nb_perm FROM t_permissions_prm;
SELECT COUNT(*) INTO nb_ress FROM t_ressources_res;
IF nb_perm > 0 THEN
IF nb_ress > 0 THEN
SET i = 0;
OPEN perms;
REPEAT SET j = 0;
FETCH perms INTO perm_id;
OPEN ress;
REPEAT FETCH ress INTO ress_id;
INSERT INTO r_utl_haspermissionfor_res_rur(res_id, utl_id, prm_id, rur_droit)
VALUES (ress_id, id_utilisateur, id_utilisateur, 0);
SET j = j + 1;
UNTIL j = nb_ress END REPEAT;
CLOSE ress;
SET i = i + 1;
UNTIL i = nb_perm END REPEAT;
CLOSE perms;
END IF;
END IF;
END//
-- On remet le délimiteur normal
DELIMITER ;
Et pour l'utiliser, ça ne demande pas un doctorat en SQL, ici par exemple, je crée un nouvel utilisateur donc l'identifiant est «1» :
-- Exemple d'utilisation :
CALL pr_addUtilisateur(1);
J'ai mis une indentation et des commentaires, copie/colle ça dans un éditeur avec une coloration syntaxique SQL genre Notepad++ pour le lire plus facilement. Reviens poser des questions si certains éléments te semblent flous. Mais si tu lis ça tranquillement ligne par ligne, tu devrais assez facilement comprendre comme ça marche.
______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)