JeuWeb - Crée ton jeu par navigateur
[PhPMyAdmin]Commande DELIMITER - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PhPMyAdmin]Commande DELIMITER (/showthread.php?tid=10)



[PhPMyAdmin]Commande DELIMITER - Myrina - 08-12-2010

J'aimerai savoir si il y a moyen d'envoyer plusieurs instructions MySQL (un script) avec PhpMyAdmin quand le script contient des triggers ou des procédures stockées qui nécessitent de redéfinir temporairement le délimiteur de fin d'instruction?

Actuellement, je m'en sors en découpant les commandes mais c'est un risque d'erreur :heuuu:


RE: [PhPMyAdmin]Commande DELIMITER - NicoMSEvent - 08-12-2010

ça existe... mais de là a t'affirmer que PHPMyAdmin gère ça a 100%... Undecided

Perso, je préfère décharger ma DB, et utiliser du PHP (POO? Wink ) qui déclenche certains évènements sur certaines actions.
Pour moi, MySQL est un SGBD d'appoint, relativement robuste, et rapide.
Savais-tu qu'oracle à une version gratutie a condition de ne pas dépasser les 4Go de données? Smile


mysql> delimiter |

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> |
Query OK, 0 rows affected (0.00 sec)

mysql> CALL simpleproc(@a)|
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a|
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
Source : http://dev.mysql.com/doc/refman/5.0/fr/create-procedure.html

Autre lien intéressant : http://forums.mysql.com/read.php?98,126320,126320


RE: [PhPMyAdmin]Commande DELIMITER - Myrina - 08-12-2010

Je vois que tu n'as pas compris ma question, donc je reformule.

Comment exécuter via PhpMyAdmin:

create table....;
create table...;
delimiter $$
create trigger
begin
..;
...;
end
$$
delimiter ;
create table...;



RE: [PhPMyAdmin]Commande DELIMITER - niahoo - 08-12-2010

et ben en le mettant dans la textbox pour le SQL ça te donne quoi comme erreur ?

j'ai vite fait testé ça:

delimiter $$
DELETE FROM `ps_supplier_coeff` WHERE `percent_last_change` = 0 $$
delimiter ;
select * from `ps_supplier_coeff`

ça marche bien, bon j'ai pas testé avec les triggers, donc dis moi l'erreur que ça te renvoie


RE: [PhPMyAdmin]Commande DELIMITER - atra27 - 08-12-2010

Ya pas un input délimiteur dans la fenetre de requete sql de phpmyadmin?
Il me semble qu'il y en as un... c'est donc que PMA le gére... reste a savoir si il gére suffisamment bien pour ce que tu souhaite faire?


RE: [PhPMyAdmin]Commande DELIMITER - Myrina - 08-12-2010

(08-12-2010, 05:00 PM)niahoo a écrit : et ben en le mettant dans la textbox pour le SQL ça te donne quoi comme erreur ?

j'ai vite fait testé ça:

delimiter $$
DELETE FROM `ps_supplier_coeff` WHERE `percent_last_change` = 0 $$
delimiter ;
select * from `ps_supplier_coeff`

ça marche bien, bon j'ai pas testé avec les triggers, donc dis moi l'erreur que ça te renvoie
Justement, c'est avec un trigger ou une proc stock qu'il faut tester.

Sinon, j'ai pas d'erreur, ca mouline et ca fait rien !!! (même au bout d'une demi-heure)


RE: [PhPMyAdmin]Commande DELIMITER - niahoo - 08-12-2010

En CLI ça roule ?


RE: [PhPMyAdmin]Commande DELIMITER - NicoMSEvent - 08-12-2010

tu as essayé via une autre fenetre un "SHOW PROCESSLIST" afin de voir sur quoi ça coince?


RE: [PhPMyAdmin]Commande DELIMITER - Myrina - 08-12-2010

Pour le CLI, encore faut-il que l'hébergeur propose autre chose que PhpMyAdmin....

(08-12-2010, 08:03 PM)NicoMSEvent a écrit : tu as essayé via une autre fenetre un "SHOW PROCESSLIST" afin de voir sur quoi ça coince?
j'ai fait le test en local, enfin essayé.
J'ai pas la main sur la deuxième fenêtre PhpMyAdmin, celle-ci s'est mise en Chargement en cours comme la première qui exécute mon script.

Par contre, MySql ne semble pas travailler (temps processeur pour mysqld = 0)
Mais Apache mouline (httpd a environ 50% de CPU)

EDIT: j'ai peut être une piste pour le plantage mais pas pour la résolution: j'ai trouvé l'endroit dans PhpMyAdmin ou ça boucle (/imports/sql.php au environ de la ligne 120):

// this is about 7 times faster that looking for each sequence i
// one by one with strpos()
==> if (preg_match('/(\'|"|#|-- |\/\*|`|(?i)DELIMITER)/', $buffer, $matches, PREG_OFFSET_CAPTURE, $i)) {
// in $matches, index 0 contains the match for the complete
// expression but we don't use it
$first_position = $matches[1][1];
} else {
$first_position = $big_value;
}
Je suis particulièrement mal à l'aise avec les regexp :pleure2: donc j'ai pas compris ce que cela fait


RE: [PhPMyAdmin]Commande DELIMITER - NicoMSEvent - 09-12-2010

a voir la tête que ça a, ça te retourne la position de ton délimiteur, en enlevant les commentaires (les # ou -- ou /* ? ) et le contenu des chaines (ce qui commence par " ou ' ). Y a peut-etre des finesses qui m'échappent, mais a mon avis ça devrait être ça. Sinon, sur le site du zéro, y a de bonnes introductions aux regex Wink