MySQL Forums
Forum List  »  French

Re: duplicate entry
Posted by: Jean Molliné
Date: November 17, 2010 08:41AM

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 ;)

Options: ReplyQuote


Subject
Views
Written By
Posted
6973
November 04, 2010 02:43PM
3198
November 05, 2010 12:46AM
2619
November 05, 2010 06:53AM
2562
November 05, 2010 07:21AM
2870
November 05, 2010 07:43AM
2826
November 05, 2010 07:58AM
2609
November 05, 2010 08:17AM
2723
November 05, 2010 08:23AM
2582
November 08, 2010 10:53AM
2642
November 08, 2010 11:11AM
3283
November 11, 2010 08:32AM
2701
November 11, 2010 08:49AM
2605
November 11, 2010 09:05AM
2519
November 11, 2010 11:12AM
2486
November 11, 2010 01:08PM
2523
November 11, 2010 01:12PM
2610
November 14, 2010 11:06AM
2549
November 14, 2010 12:01PM
2640
November 17, 2010 08:01AM
Re: duplicate entry
2923
November 17, 2010 08:41AM
2590
November 21, 2010 10:51AM
2509
November 21, 2010 12:30PM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.