|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 120 ![]() |
Bonjour,
J'ai vu plusieurs postes traitant de ce sujet sur le forum mais malheureusement aucun n'allait assez loin dans la solution proposée. J'ai une procédure stockée qui fait appel à un curseur. DELIMITER // CREATE PROCEDURE debou_abrev () DECLARE cabrev CURSOR FOR select abreviations,correction from abreviation; BEGIN for enreg in cabrev loop update clients, abreviation set clients.adr2=REPLACE(clients.adr2,abreviations,correction); end loop; END //; Comme j'ai lu sur différents postes que le problème pouvait être lié à des délimiteurs j'ai même mis en place cette évolution sur ma procédure. Mais même dans ce cas elle ne fonctionne toujours pas. Le message d'erreur (selon l'interpreteur de ligne de commande de mysql 5.0.24) est: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLA RE cabrev CURSOR FOR select abreviations,correction from abreviation; BEGIN' at line 2. Ce que juge de ce message d'erreur, c'est qu'il n'arrive pas à interpréter la commande declare. J'espère que quelqu'uns saura m'apporter la solution. Merci d'avance, |
|
|
00
|
|
|
#2 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Salut,
Le moins qu'on puisse dire c'est que ta syntaxe n'est pas très catholique (DECLARE avant le BEGIN et boucle for bizarre...) Regarde ici pour un exemple d'utilisation des curseurs : http://dev.mysql.com/doc/refman/5.0/en/cursors.html
__________________
Pensez au bouton
|
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 120 ![]() |
La boucle for utilisé c'est typiquement de l'oracle.
Pour l'histoire du begin après la déclaration de mon curseur c'est une info que j'ai lu sur un autre poste. Effectivement pour avoir modifié la syntaxe de du begin et du declare, je n'ai plus l'erreur j'en ai une autre lié à ma boucle for. Il faut toujours modifié une chose à la foix pour identifier un problème !!!! |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 120 ![]() |
Je reviens à la charge avec quelque chose de tout bête.
Le create procedure exécute t-il cette derniere ? Y a t'il une commande à lancer pour ensuite execute cette procédure ? |
|
|
00
|
|
|
#5 | |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
__________________
Pensez au bouton
|
|
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 120 ![]() |
Merci maximilian,
En même temps dans la doc il dise de lancer un call nom_procedure et sa fonctionne. En locurrence dans mon cas sous l'interpreteur de commande de mysql quand j'ouvre le call et que je met derrière le nom de ma procédure ; le prompt ne se ferme pas c'est comme si il attendait un paramètre en entrer. Mais ni en entrer, ni en sortie je n'utilise de variables. DELIMITER // CREATE PROCEDURE dedou_abrev () BEGIN DECLARE a VARCHAR(10); DECLARE b VARCHAR(50); DECLARE cabrev CURSOR FOR select abreviations,correction from abreviation; open cabrev; loop fetch cabrev into a,b; update clients set clients.adr2=REPLACE(clients.adr2,a,b); end loop; END // Pour expliquer le but de cette procédure; c'est de modifier dans un champs adresse les abréviations utilisés par certains clients. |
|
|
00
|
|
|
#7 | |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
__________________
Pensez au bouton
|
|
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 120 ![]() |
effectivement c'est mieux!!!
par contre ce que je ne comprends pas c'est pourquoi il ne se passe rien? ERROR 1329 (02000): No data - zero rows fetched, selected, or processed DELIMITER // CREATE PROCEDURE dedou_abrev () BEGIN DECLARE a VARCHAR(10); DECLARE b VARCHAR(50); DECLARE cabrev CURSOR FOR select abreviations,correction from abreviation; open cabrev; loop fetch cabrev into a,b; update clients set clients.adr2=REPLACE(clients.adr2,a,b); end loop; END // elle devrait en toute logique modifier le champs adresse dans la table clients en prenant pour paramètre chaque valeur de la table abreviation |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 120 ![]() |
Merci maximilian pour toutes ses informations !!!
Le problème est résolu, il me reste plus qu'à pirater la poste pour trouver toutes les abréviations existantes dans le monde |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com