IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Aide à création d'une procédure


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 21
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Je pense que de cette forme ça sera mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 21
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE tbl_me80fn set Division = versusdiv([Div])"
    versusdiv étant une fonction VB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 21
    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

  5. #5
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Avant de continuer de se perdre un peu, pourrait tu nous donner le script de création de ta base de données ?

  6. #6
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 21
    Par défaut
    volontier mais je fais comment ?

    claude

  7. #7
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Ce sont les CREATE TABLE ...

  8. #8
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 21
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    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

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    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 ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'une procédure sur un texte
    Par GLDavid dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 04/06/2007, 10h48
  2. Besoin d'aide pour faire une procédure stockée
    Par PoichOU dans le forum SQL
    Réponses: 17
    Dernier message: 30/04/2007, 17h55
  3. [VBA]Création d'une procédure de recherche
    Par Thegad dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/04/2007, 18h16
  4. [Aide] Création d'une interface Ajout/Suppression
    Par Fredods26 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 19/10/2006, 14h16
  5. [DB2]Eurreur lors de la création d'une procédure
    Par uaspecitmoon dans le forum DB2
    Réponses: 1
    Dernier message: 25/05/2005, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo