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 01/02/2012, 10h33   #1
Membre du Club
 
Inscription : juin 2009
Messages : 101
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 101
Points : 40
Points : 40
Par défaut Erreur dans la valeur d'une variable

Bonjour,

J'ai un probleme lors de l'execution de ma procedure stocké

voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
        DECLARE client_id INTEGER ;
	DECLARE code_client VARCHAR(10) ;
	DECLARE base_nom VARCHAR(100) ; 
	DECLARE cursor1 CURSOR FOR SELECT basenom,clientid FROM db1.ma_table WHERE basecode = 'TOTO';
 
	open cursor1;
	fetch cursor1 INTO base_nom,client_id;
	SELECT base_nom,client_id;
 
 
	WHILE i <= total_ligne DO
		 SELECT count(id) INTO nb_ligne FROM base_nom.modifications;
       end while;

Mon probleme est qu'a l'execution MYsql me dit qu'il ne trouve pas base_nom.modifications cela veut dire qu'il ne remplace pas base_nom par sa valeur
Du coup mon probleme est comment faire pour utliser la valeur de la variable base_nom

Merci d'avance
mattmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 13h25   #2
Membre Expert
 
Homme Fabio
Développeur Java
Inscription : octobre 2002
Messages : 1 348
Détails du profil
Informations personnelles :
Nom : Homme Fabio
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2002
Messages : 1 348
Points : 1 824
Points : 1 824
Envoyer un message via Skype™ à jowo
Bonjour,

On peut pas utiliser un nom de variable pour le nom d'un champ ou d'un table.

Dans ces cas, on passe par une requête préparée.
Code :
1
2
3
4
5
6
7
 
DO WHILE (/*ta condition que je n'ai comprise*/)
    SET @req = CONCAT('SELECT COUNT(1) INTO nb_ligne FROM `', nom_base, '`.modifications');
    PREPARE @stmnt FROM @reg;
    EXECUTE @stmnt INTO nb_ligne;
    DEALLOCATE PREPARE @stmnt;
END WHILE;
__________________
Bien le bonjour chez vous
Jowo
jowo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 14h08   #3
Membre du Club
 
Inscription : juin 2009
Messages : 101
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 101
Points : 40
Points : 40
Merci bien ca repond bien a ma question et en plus ca repond a la question que je vient de me poser de comment integrer le resultat de ma requete
mattmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 15h28   #4
Membre du Club
 
Inscription : juin 2009
Messages : 101
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 101
Points : 40
Points : 40
EN fin de compte y me reste un petit probleme

Voila mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
DECLARE nb_ligne INTEGER ;
	DECLARE nb_ligne_negatif INTEGER ;
	DECLARE total_ligne INTEGER ;
	DECLARE i INT DEFAULT 1 ;
	DECLARE client_id INTEGER ;
	DECLARE code_client VARCHAR(10) ;
	DECLARE base_nom VARCHAR(100) ; 
 
	DECLARE nomdelabase VARCHAR(100);
	DECLARE nomdelatable VARCHAR(100);
	DECLARE cursor1 CURSOR FOR SELECT basenom,clientid FROM db1.matable1 WHERE basecode = 'TOTO';
 
	open cursor1;
	fetch cursor1 INTO base_nom,client_id;
	SELECT base_nom,client_id;
	SELECT count(clientid) INTO total_ligne FROM db1.matable1 WHERE basecode = 'TOTO';
	SELECT total_ligne;
	SET nomdelabase := base_nom;
	SET nomdelatable := '`.modifications';
 
	 WHILE i <= total_ligne do
 
		SET @sqlcmd = CONCAT('SELECT COUNT(id) FROM `', base_nom);
		SET @sqlcmd = CONCAT(@sqlcmd,nomdelatable);
		PREPARE stmnt FROM @sqlcmd;
		EXECUTE stmnt ;
		DEALLOCATE PREPARE stmnt;
 
 
	END WHILE;
	close cursor1;	
 
END$$
Mon probleme est que je voudrait recuperer le resultat de EXECUTE stmnt mais je n'y arrive pas j'ai essayé cette syntaxe EXECUTE stmnt into nb_ligne mais a la compilation Mysql me provoque une erreur

Merci d'avance
mattmax 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 17h19.


 
 
 
 
Partenaires

Hébergement Web