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 13/08/2008, 16h29   #1
Invité régulier
 
Inscription : juillet 2008
Messages : 19
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 19
Points : 7
Points : 7
Par défaut Aide à création d'une procédure

Bonjour

Voici mon problème

Dans une table t1 j'ai un champ texte appelé DIV

Afin de l'utiliser comme comparateur dans l'UPDATE d'une autre table, il me faut changer la valeur de ce champ sachant que :

si champ = RFRV alors champ doit être égal à RFRM
si champ = RFRM alors champ doit être égal à RFRV
si champ autre alors champ = champ

j'ai essayé de créer une fonction à l'aide de MySql Query Brother

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `suivi_transfert_retour`.`versusdiv` $$
CREATE PROCEDURE `suivi_transfert_retour`.`versusdiv`(TOTO)
 
BEGIN
SELECT CASE TOTO
  WHEN 'rfrv' THEN 'rfrm'
  WHEN 'rfrm' THEN 'rfrv' ELSE `TOTO`
END
END $$
 
DELIMITER ;
qui me renvoie une erreur de syntaxe 1064 "...to use near ')
BEGIN
SELECT CASE TOTO
WHEN 'rfrv' THEN 'rfrm'
WHEN 'rfrm' THEN 'rfr at line 1

C'est ma première création de fonction et je suis un peu perdu.

Quelqu'un peut il m'aider ?

Merci d'avance

Précision : j'ai ouvert tous les droits sur la base
crouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 16h41   #2
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Bonjour,

Je pense que de cette forme ça sera mieux.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `suivi_transfert_retour`.`versusdiv` $$
CREATE PROCEDURE `suivi_transfert_retour`.`versusdiv`(TOTO VARCHAR)
 
BEGIN
SELECT CASE TOTO
  WHEN 'rfrv' THEN 'rfrm'
  WHEN 'rfrm' THEN 'rfrv'
  ELSE `TOTO`
END;
END $$
 
DELIMITER ;
Peut être avec un code réel il serait plus simple de t'aider.
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 18h25   #3
Invité régulier
 
Inscription : juillet 2008
Messages : 19
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 19
Points : 7
Points : 7
Par défaut suite

en fait je suis en train de migrer une appli que j'ai développée en Visual Basic et Access.
aujourd'hui je conserve mon support Visual Basic comme interface, mais je me sert de MySql comme BDD.

dans mon traitement, je mets à jour une table, (tbl_suivi), à partir d'une autre table, (tbl_me80fn), dans lesquelles j'ai un champ commun "Division".

le hic est que dans l'une tbl_me80fn, lorsque mon champ contient rfrv en fait dans l'autre mon champ contient rfrm et inversement (pb d'extraction d'un ERP)

je procède donc en préalable de la mise à jour de tbl_suivi, où j'ai une jointure des deux tables sur l'égalité du champ division,à l'inversion de la valeur des champs dans tbl_me80fn avec en SQL VB:

Code :
"UPDATE tbl_me80fn set Division = versusdiv([Div])"
versusdiv étant une fonction VB

Code :
1
2
3
4
5
6
7
8
9
10
11
12
public sub versusdiv(div)
 
SELECT case div
case "rfrv"
versusdiv="rfrm"
case "rfrm" 
versusdiv = "rfrv"
case else
versusdiv = div
end SELECT
 
end sub
tu vois que il n'y a rien de vraiment compliqué dans mon histoire

je vais essayer ta solution demain au bureau et te dirais quoi

en tout cas merci de t'y être interressé si rapidement

claude
crouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 09h14   #4
Invité régulier
 
Inscription : juillet 2008
Messages : 19
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 19
Points : 7
Points : 7
Par défaut toujours erreur

Script line: 4 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 ')

BEGIN
SELECT CASE TOTO
WHEN 'rfrv' THEN 'rfrm'
WHEN 'rfrm' THEN 'rf' at line 1

est ce que cela vous parle ?
le code complet est la copie de la suggestion de kazou
crouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 12h57   #5
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Bonjour,

Avant de continuer de se perdre un peu, pourrait tu nous donner le script de création de ta base de données ?
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 15h04   #6
Invité régulier
 
Inscription : juillet 2008
Messages : 19
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 19
Points : 7
Points : 7
volontier mais je fais comment ?

claude
crouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 15h07   #7
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Ce sont les CREATE TABLE ...
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 16h52   #8
Invité régulier
 
Inscription : juillet 2008
Messages : 19
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 19
Points : 7
Points : 7
Ma base a été créée à partir d'une migration Access

Je ne traite que des informations soit récupérées par des LOAD DATA sur fichier texte, soit mises à jour par UPDATE ou INSERT en fonction des données se trouvant dans la table principale.

Pour ce qui est de mon problème, j'ai contourné la difficulté par des UPDATE avec des
Code :
SET = IF(x,IF(y,'toto','tata'),x) ce qui marche vite et bien.
Malgré tout, je suis toujours preneur d'un tuto sur les fonctions et les Select Case car la doc Mysql reste assez hermétique pour ce qui me concerne dans ce cas précis.

Merci de m'avoir prêter attention

claude
crouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2010, 10h13   #9
Invité de passage
 
Inscription : avril 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 5
Points : 3
Points : 3
Par défaut problème dans une proc mysql 5.1

Bonjour à tous,

j'ai un problème dans ma procédure stockée sous mysql 5.1, apparemment le insert into ne passe pas
/home/hakim/Bureau/proc.png
racafatima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2010, 10h14   #10
Invité de passage
 
Inscription : avril 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 5
Points : 3
Points : 3
Par défaut voila le code

DELIMITER $$

DROP PROCEDURE IF EXISTS `hakim_test`.`map_hotels`$$
CREATE PROCEDURE `hakim_test`.`map_hotels` (in swLat double,in swLon double,in neLat double,in neLon double)
BEGIN
declare done INT DEFAULT 0;
declare hotel_id int ;
declare lat_hotel double;
declare long_hotel double;
declare curseur1 CURSOR FOR SELECT id,latitude, longitude from accom_details;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
delete from geo_hotel;
OPEN curseur1;
REPEAT

FETCH curseur1 INTO hotel_id,lat_hotel,long_hotel ;
while hotel_id is not null
INSERT INTO geo_hotel (id,lat,lon,g )
VALUES( hotel_id,lat_hotel,long_hotel, GeomFromText(CONCAT('POINT(', lat_hotel,' ', long_hotel,')')));
end while

END REPEAT;
CLOSE curseur1;

END$$

DELIMITER ;
racafatima 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 05h11.


 
 
 
 
Partenaires

Hébergement Web