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
6501
November 04, 2010 02:43PM
2997
November 05, 2010 12:46AM
2432
November 05, 2010 06:53AM
2365
November 05, 2010 07:21AM
2675
November 05, 2010 07:43AM
2648
November 05, 2010 07:58AM
2410
November 05, 2010 08:17AM
2561
November 05, 2010 08:23AM
2394
November 08, 2010 10:53AM
2426
November 08, 2010 11:11AM
3044
November 11, 2010 08:32AM
2470
November 11, 2010 08:49AM
2407
November 11, 2010 09:05AM
2311
November 11, 2010 11:12AM
2272
November 11, 2010 01:08PM
2355
November 11, 2010 01:12PM
2398
November 14, 2010 11:06AM
2358
November 14, 2010 12:01PM
2429
November 17, 2010 08:01AM
Re: duplicate entry
2667
November 17, 2010 08:41AM
2393
November 21, 2010 10:51AM
2309
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.