Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/01/2008, 16h33   #1
Candidat au titre de Membre du Club
 
Développeur Web
Inscription : janvier 2008
Messages : 38
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2008
Messages : 38
Points : 12
Points : 12
Envoyer un message via MSN à donbrico
Par défaut Impossible de créer une procédure stockée sur MySQL: 5.0.38

Bonjour,
J'ai suivi un tuto pour écrire une procédure stockée, la voici :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DROP FUNCTION IF EXISTS `update_flag()`;
CREATE PROCEDURE `update_flag()`
BEGIN
DECLARE ok INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000` SET ok = 1;
DECLARE cur CURSOR FOR SELECT pro_url, upload_manuel FROM t_liste_url_annuaire;
DECLARE fpro_url VARCHAR(255), fupload_manuel INT(1);
 
OPEN cur;
 
REPEAT
FETCH cur INTO fpro_url, fupload_manuel;
IF NOT ok THEN
UPDATE t_professionnel_test SET upload_manuel = fupload_manuel WHERE pro_url = fpro_url;
END IF;
UNTIL ok END REPEAT;
 
CLOSE cur;
END
!
Mais voici le message d'erreur que j'ai :
Citation:
Erreur 1064 : SQLSyntax Error near "BEGIN DECLARE ok INT DEFAULT 0" at line1.
D'avance merci pour vos réponses.
donbrico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 17h11   #2
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
slt...

t´as melange des exemples....
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DELIMITER $$

DROP PROCEDURE IF EXISTS `update_flag` $$
CREATE PROCEDURE `update_flag` ()
BEGIN

DECLARE ok INT DEFAULT 0;
DECLARE fpro_url VARCHAR(255);
declare fupload_manuel INT(1);
DECLARE cur CURSOR FOR SELECT pro_url, upload_manuel FROM t_liste_url_annuaire;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET ok = 1;
OPEN cur;

REPEAT
 FETCH cur INTO fpro_url, fupload_manuel;
 IF NOT ok THEN
 UPDATE t_professionnel_test SET upload_manuel = fupload_manuel WHERE pro_url = fpro_url;
 END IF;
 UNTIL ok END REPEAT;

CLOSE cur;
END $$
DELIMITER ;
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 18h52   #3
Candidat au titre de Membre du Club
 
Développeur Web
Inscription : janvier 2008
Messages : 38
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2008
Messages : 38
Points : 12
Points : 12
Envoyer un message via MSN à donbrico
Par défaut Toujours mon probleme pour exécuter une procédure stockée

Bonsoir jota5450 et merci de me répondre, c'est sympa :

Je n'ai pas bien compris ce que j'ai mélangé ?
Mon idée est de faire une update sur une table en récupérant les valeurs d'une autre dans un curseur, mon exemple traite 2 tables, j'ai juste rajouté le "DROP PROCEDURE..." dans mon éditeur SQL.
Pourrais-tu s'il te plait m'expliquer ce qui ne va pas dans ce que j'ai fait ?
D'avance merci.
donbrico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 19h12   #4
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
slt...

j ai pas regarder si ta procedure functionne... j´ai juste regarde cote syntaxe.

Quand je parle que tu dois avoir melange 2 exemple...
tu "drop" une function et tu "create" une procedure...

Apres ta:
Code :
1
2
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000` SET ok = 1;
DECLARE cur CURSOR FOR SELECT pro_url, upload_manuel FROM t_liste_url_annuaire;
c´est a l´envers... tu dois creer ton cursor avant de creer l´handler.
sur la declaration de l´handler regarde les cotes sur le 02000.
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 19h56   #5
Candidat au titre de Membre du Club
 
Développeur Web
Inscription : janvier 2008
Messages : 38
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2008
Messages : 38
Points : 12
Points : 12
Envoyer un message via MSN à donbrico
Par défaut Merci Jota ça marche du feu de dieu !!!

Super !

Parfait, j'avais pourtant suivi le tuto à la lettre, mais c'est vrai que le code erreur de MySQL était pourtant clair (déclaration du curseur avant le handler !), donc voici ce que j'ai fait :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DELIMITER !;
CREATE PROCEDURE `update_flag` ()
BEGIN
DECLARE ok INT DEFAULT 0;
DECLARE fpro_url VARCHAR(255);
DECLARE fupload_manuel INT(1);
DECLARE cur CURSOR FOR SELECT pro_url, upload_manuel FROM t_liste_url_annuaire;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET ok = 1;
OPEN cur;
REPEAT
 FETCH cur INTO fpro_url, fupload_manuel;
 IF NOT ok THEN
 UPDATE t_professionnel_test SET upload_manuel = fupload_manuel WHERE pro_url = fpro_url;
 END IF;
 UNTIL ok END REPEAT;
CLOSE cur;
END 
DELIMITER !;
et ça marche parfaitement, encore merci
donbrico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2008, 18h30   #6
Invité de passage
 
Inscription : octobre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 2
Points : 1
Points : 1
Par défaut problème avec une fonction

moi j'ai le meme problème sauf que c'est avec des fonctions voila j'essaye de créer une fonction sur mysql le code est le suivant :

DROP FUNCTION IF EXISTS menu_deroule;



CREATE FUNCTION menu_deroule(id INT UNSIGNED)
RETURNS TEXT DETERMINISTIC
BEGIN
DECLARE t TEXT;
DECLARE r TEXT;
DECLARE i INT UNSIGNED;
SET i = id;
SET t = "";
SET r = "";
WHILE i!=0 AND ISNULL(i)=0
DO
SELECT `child_of`, `titre` INTO i, t FROM `menu` WHERE menu.id=i;
SET r = CONCAT(t, "/", r);
IF i = id THEN
SET i=0;
END IF;
END WHILE;

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
et il me génère cette erreur :

Erreur

requête SQL:

CREATE FUNCTION menu_deroule(
id INT UNSIGNED
) RETURNS TEXTDETERMINISTIC BEGIN DECLARE t TEXT;

MySQL a réponduocumentation
#1064 - 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 'TEXT' at line 4
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
je ne sais pas quoi faire aide please
zezeto est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h06.


 
 
 
 
Partenaires

Hébergement Web