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 :

Erreur de syntaxe sur un CREATE FUNCTION


Sujet :

SQL Procédural MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut Erreur de syntaxe sur un CREATE FUNCTION
    Bonjour à tous !

    Je débute dans la magie des fonctions et des procédures stockées sous mysql.

    Je viens d'écrire une jolie fonction qui doit me permettre de renvoyer du TEXT.

    En voici le contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    USE expertimo;
    DELIMITER //
    CREATE FUNCTION f_lot_description(id_lot INT(11)) RETURNS TEXT DETERMINISTIC
    BEGIN
    #on récupère le numéro de dossier concernant le lot
    #SELECT COUNT(*) INTO @cnt FROM egroupware.egw_cal WHERE cal_id=id;
    SELECT dossier into @id_dossier from expertimo.lot where id = id_lot;
    #on va récupérer tous les lots du dossier
    DECLARE done INT DEFAULT 0;
    DECLARE retour TEXT;
    DECLARE lot_type VARCHAR(100);
    DECLARE lot_nbpp SMALLINT(6);
    DECLARE lot_surface SMALLINT(6);
    DECLARE cur1 CURSOR FOR SELECT id from type,nbpp,surface where dossier = @id_dossier;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
     
    OPEN cur1;
     
    retour = CONCAT(retour,"\n");
    REPEAT
    FETCH cur1 INTO lot_type, lot_nbpp, lot_surface;
    retour = CONCAT(retour, "----------------------------------------------------------------","\n");
    retour = CONCAT(retour, "Type du bien : ", lot_type,"\n");
    if (lot_nbpp != 0) THEN
    retour = CONCAT(retour, "Nb pièces : ",lot_nbpp,"\n");
    END IF;
    if (lot_surface != 0) THEN
    retour = CONCAT(retour, "Surface :", lot_surface,"\n");
    END IF;
    UNTIL done END REPEAT;
    RETURN retour;
    END //
    DELIMITER;
    Mysql me dit ça que j'ai une erreur à la ligne 7 qui est :
    SELECT dossier into @id_dossier from expertimo.lot where id = id_lot;
    Je vois pas pourquoi il m'envoie boulet sur cette ligne !

    Pourriez vous me venir en aide !

    Merci d'avance
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Ha ha ha, j'avance !

    Voici la nouvelle mouture de ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    USE expertimo;
    DELIMITER //
    CREATE FUNCTION f_lot_description(id_dossier INT(11)) RETURNS TEXT DETERMINISTIC
    BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE retour TEXT;
    DECLARE lot_type VARCHAR(100);
    DECLARE lot_nbpp SMALLINT(6);
    DECLARE lot_surface SMALLINT(6);
    DECLARE cur1 CURSOR FOR SELECT id from type,nbpp,surface where dossier = id_dossier;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    SELECT dossier into @id_dossier from expertimo.lot where id = id_lot;
    OPEN cur1;
    retour = CONCAT(retour,"\n");
    REPEAT
    FETCH cur1 INTO lot_type, lot_nbpp, lot_surface;
    retour = CONCAT(retour, "----------------------------------------------------------------","\n");
    retour = CONCAT(retour, "Type du bien : ", lot_type,"\n");
    if (lot_nbpp != 0) THEN
    retour = CONCAT(retour, "Nb pièces : ",lot_nbpp,"\n");
    END IF;
    if (lot_surface != 0) THEN
    retour = CONCAT(retour, "Surface :", lot_surface,"\n");
    END IF;
    UNTIL done END REPEAT;
    RETURN retour;
    END //
    DELIMITER;
    En gros les déclarations se font automatiquement après le begin (ça résoud pas mal de souci)

    Maintenant mon souci me parait beaucoup plus simple à résoudre, je cherche a renvoyer un TEXT et j'ai besoin de concaténer des informations.

    Le principe est simple, j'ai un dossier possèdant plusieurs lots (de 1 à n), et j'essaie d'écrire une procédure qui me renverra un descriptif des lots du dossier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    retour = CONCAT(retour,"\n");
    REPEAT
    FETCH cur1 INTO lot_type, lot_nbpp, lot_surface;
    retour = CONCAT(retour, "----------------------------------------------------------------","\n");
    retour = CONCAT(retour, "Type du bien : ", lot_type,"\n");
    if (lot_nbpp != 0) THEN
    retour = CONCAT(retour, "Nb pièces : ",lot_nbpp,"\n");
    END IF;
    if (lot_surface != 0) THEN
    retour = CONCAT(retour, "Surface :", lot_surface,"\n");
    END IF;
    UNTIL done END REPEAT;
    et cette valeur sera utilisé dans une requete pour mettre à jour les champs d'une autre table.

    Du coup j'ai déclarer ma valeur de retour et j'essaie de faire retour = CONCAT(retour,valeur1,valeur2 ...)

    Apparemment c'est pas ça mais pourtant je m'inspire d'une procédure stockée déjà écrite où ca à l'air de fonctionner

    Merci d'avance de votre aide
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

Discussions similaires

  1. Erreur de syntaxe sur Create Function
    Par olibara dans le forum Développement
    Réponses: 12
    Dernier message: 12/01/2015, 09h23
  2. [MySQL] Erreur de syntaxe sur ma requête SELECT
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 08/03/2006, 11h50
  3. [MySQL] Erreurs de syntaxe sur requêtes DELETE
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/03/2006, 15h53
  4. Erreur de syntax sur JOIN
    Par helje dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/03/2006, 17h36
  5. Erreur de syntaxe sur la création d'une vue.
    Par cgougeon dans le forum Installation
    Réponses: 3
    Dernier message: 09/09/2005, 11h00

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