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
6471
November 04, 2010 02:43PM
2969
November 05, 2010 12:46AM
2406
November 05, 2010 06:53AM
2348
November 05, 2010 07:21AM
2651
November 05, 2010 07:43AM
2626
November 05, 2010 07:58AM
2392
November 05, 2010 08:17AM
2548
November 05, 2010 08:23AM
2373
November 08, 2010 10:53AM
2408
November 08, 2010 11:11AM
3029
November 11, 2010 08:32AM
2455
November 11, 2010 08:49AM
2398
November 11, 2010 09:05AM
2300
November 11, 2010 11:12AM
2261
November 11, 2010 01:08PM
2342
November 11, 2010 01:12PM
2376
November 14, 2010 11:06AM
2345
November 14, 2010 12:01PM
2414
November 17, 2010 08:01AM
Re: duplicate entry
2644
November 17, 2010 08:41AM
2373
November 21, 2010 10:51AM
2290
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.