Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1082 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [phpmyadmin] Les procédures stoquées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[phpmyadmin] Les procédures stoquées

n°2306965
unisev
Posté le 26-10-2017 à 10:46:06  profilanswer
 

Bonjour,
 
Je n'arrive pas à créer une procédure stoquée sous PHPMYADMIN, qui fasse plus d'une ligne... quelqu'un a-t-il déjà essayé ?
Une histoire de délémiteurs ?


Message édité par unisev le 26-10-2017 à 10:57:48
mood
Publicité
Posté le 26-10-2017 à 10:46:06  profilanswer
 

n°2306990
pluj
Posté le 26-10-2017 à 13:30:07  profilanswer
 

Citation :

Une histoire de délémiteurs ?


 
C'est effectivement possible. L'as-tu changé ? Quel est ton "code" ?


Message édité par pluj le 26-10-2017 à 13:30:26
n°2306993
unisev
Posté le 26-10-2017 à 13:55:34  profilanswer
 

Je pensais que l'interface servait justement à contourner le swap de délimiteurs :
https://www.developpez.net/forums/attachments/p321564d1508766200/php/outils/phpmyadmin/interface-creer-procedure-stoquee-plusieurs-lignes-delimiteur/procstock.png/
 
C'est pas vraiment du code que je met la-dedans, c'est juste 2 lignes, qui marchent séparément (avec ou sans point-virgules) :
TRUNCATE TABLE `playerstatstrain`;
INSERT playerstatstrain SELECT * FROM playerstats;
 
https://www.developpez.net/forums/attachments/p321670d1508785111/php/outils/phpmyadmin/interface-creer-procedure-stoquee-plusieurs-lignes-delimiteur/procstoclerr.png/
 
C'est pareil avec ou sans les points-virgules en fin de ligne...


Message édité par unisev le 26-10-2017 à 13:57:35
n°2306999
rufo
Pas me confondre avec Lycos!
Posté le 26-10-2017 à 14:49:20  profilanswer
 

Une procédure stockée n'est pas censée commencer par begin :??:
Parce que là, il te dit clairement que t'as une faute de syntaxe SQL. Donc rien à voir avec le ;


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2307002
unisev
Posté le 26-10-2017 à 15:12:33  profilanswer
 

Ok donc dans la boiboite, je dois mettre un truc genre ça :
 

Code :
  1. BEGIN
  2.    TRUNCATE TABLE `playerstatstrain`;
  3.    INSERT playerstatstrain SELECT * FROM playerstats;
  4. END


 
Je crois avoir déjà essayé, mais je re-test ce soir.


Message édité par unisev le 26-10-2017 à 15:17:38
n°2307019
unisev
Posté le 26-10-2017 à 19:37:13  profilanswer
 

Oui, c'était bien ça, merci à vous !

n°2307096
unisev
Posté le 29-10-2017 à 12:38:28  profilanswer
 

J'ai une nouveau "problème" après avoir écrit 2 procstock qui fonctionnent bien, dont voici un exemple :
http://unisev.cf/ProcStockOK.png
 
Cette procédure prend un paramètre en entrée : le pid du joueur.
 
J’aimerai créer une nouvelle procédure (disons "50-UnlockAllPlayers" ) qui jouerait "40-UnlockPlayer" pour chaque ligne de la requête suivante :
SELECT DISTINCT pid FROM playerstats;
 
Mes recherches n'ont rien données sur ce point précis, qui ne me paraissait pas relever d'une grande complexité au départ...


Message édité par unisev le 29-10-2017 à 12:46:40
n°2307133
unisev
Posté le 30-10-2017 à 20:54:54  profilanswer
 

Bon alors là je bloque complètement... mon idée de faire une procstock qui lance l'autre procsotck ne parait pas réalisable...
 
Du coup je veux bien repartir dans la réécriture d'une nouvelle ProcStock mais je bloque :
 
Voici le code qui fonctionne :

Code :
  1. BEGIN
  2. INSERT INTO playerstats (pid, statname, value)
  3. SELECT mPID,statname,value FROM playerstatsunlock
  4. ON DUPLICATE KEY
  5. UPDATE value = playerstats.value+playerstatsunlock.value;
  6. CALL 45_ReRankPlayer(mPID);
  7. END


 
Je dois remplacer le paramètre mPID par la requête suivante :

Code :
  1. SELECT DISTINCT pid FROM playerstats


 
Des idées ?

n°2307134
Soileh
Lurkeur professionnel
Posté le 31-10-2017 à 00:04:53  profilanswer
 

:hello: !
As-tu essayé de passer par des curseurs ? :??:
Un petit lien explicatif : Documentation
Cela donnerait un truc du genre :

Code :
  1. BEGIN
  2.     DECLARE done INT DEFAULT FALSE;
  3.     DECLARE pid INT;
  4.     DECLARE curseurPID CURSOR FOR SELECT DISTINCT pid FROM playerstats;
  5.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  6.     OPEN curseurPID;
  7.    
  8.     read_loop: LOOP
  9.         FETCH curseurPID INTO pid;
  10.         IF done THEN
  11.             LEAVE read_loop;
  12.         END IF;
  13.        
  14.         CALL 45_ReRankPlayer(pid);
  15.     CLOSE curseurPID;
  16. END;


A voir si cela pourrait correspondre à ton besoin cependant  [:cupra] Je ne comprends pas bien comment est fait ton INSERT à partir de ton SELECT :/
 
 :jap:


---------------
And in the end, the love you take is equal to the love you make
n°2307149
unisev
Posté le 31-10-2017 à 10:16:12  profilanswer
 

Merci,
 
Je vais regarder pour les curseurs mais j'ai cru voir que c'était à utiliser en cas de dernier recours (plutôt déconseillé quoi), mais si y'a pas d'autre solution...
 
Je vais tenter d'explique ma procstock :
 
INSERT INTO playerstats (pid, statname, value)   ---> Je modifie la table playerstats...
SELECT mPID,statname,value FROM playerstatsunlock ---> je prends statname & value à partir de la table playerstatsunlock (qui est une sortie table "template" ) mais je remplace le pid par mPID le paramètre fixe de la procstock
ON DUPLICATE KEY
UPDATE value = playerstats.value+playerstatsunlock.value; ---> si la ligne existe déjà (avec mPID), je lui ajoute la valeur de playerstatsunlock
 
C'est plus clair ?


Message édité par unisev le 31-10-2017 à 10:18:12
mood
Publicité
Posté le 31-10-2017 à 10:16:12  profilanswer
 

n°2307286
unisev
Posté le 04-11-2017 à 19:15:54  profilanswer
 

Soileh a écrit :

:hello: !
As-tu essayé de passer par des curseurs ? :??:
Un petit lien explicatif : Documentation
Cela donnerait un truc du genre :

Code :
  1. BEGIN
  2.     DECLARE done INT DEFAULT FALSE;
  3.     DECLARE pid INT;
  4.     DECLARE curseurPID CURSOR FOR SELECT DISTINCT pid FROM playerstats;
  5.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  6.     OPEN curseurPID;
  7.    
  8.     read_loop: LOOP
  9.         FETCH curseurPID INTO pid;
  10.         IF done THEN
  11.             LEAVE read_loop;
  12.         END IF;
  13.        
  14.         CALL 45_ReRankPlayer(pid);
  15.     END LOOP;
  16.     CLOSE curseurPID;
  17. END;


A voir si cela pourrait correspondre à ton besoin cependant  [:cupra] Je ne comprends pas bien comment est fait ton INSERT à partir de ton SELECT :/
 
 :jap:


 
Parfait, il ne manquait que le END LOOP; avant le CLOSE curseurPID;  :)  
Merci !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [phpmyadmin] Les procédures stoquées

 

Sujets relatifs
Symfony Doctrine2 et PhpMyAdminProblème lors de l'installation de PHPmyAdmin sur Raspberry
Résultat d'une requête différent entre phpmyadmin et l'affichagePhpmyadmin importer image
Erreur phpMyadmin "The mbstring extension is missing"[Qst] - Paramètrage phpMyAdmin
Comment trouver le chemin phpmyadmin?Pas d'autorisation PhpMyAdmin
procedures qui transforme un 0 en un 1 et inversement à l'infini.UPDATE -PHPMYADMIN- URGENT
Plus de sujets relatifs à : [phpmyadmin] Les procédures stoquées


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR