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 :

Error 1064 pour fonction.


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Par défaut Error 1064 pour fonction.
    Bonjour,

    Je suis en train de créer un script en MYSQL (version 5.6.17).
    Je viens d'avoir une erreur au début du script :

    Error 1064 (42000) at line 5 : Erreur de syntaxe près de 'BEGIN
    DECLARE StartDate DATETIME;
    DECLARE EndDate DATETIME;
    DECLARE PreceedingOldValue INT DEFAULT 0;
    DECLARE Preceedin'
    Et voici mon code, qui commence comme ça:
    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
     
    DROP FUNCTION IF EXISTS getHours;
     
    DELIMITER //
     
    CREATE FUNCTION getHours()
    	BEGIN
    	DECLARE StartDate DATETIME;
    	DECLARE EndDate DATETIME;
    	DECLARE PreceedingOldValue INT DEFAULT 0;
    	DECLARE PreceedingNewValue INT DEFAULT 0;
    	DECLARE CurrentTicket INT DEFAULT 0;
    	DECLARE NbWorkingDays INT DEFAULT 0;
    	DECLARE items_id, id, old_value, new_value, id_users INT(10);
    	DECLARE date_mod, creation_date DATETIME;
    	DECLARE name VARCHAR(50);
    	DECLARE NbHours INTEGER DEFAULT 0;
     
    (...)
     
    END;
    //
    DELIMITER;
    J'ai suivi la documentation MYSQL mais je ne vois pas où ça coince, quelqu'un une idée ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Si c'est une procédure stockée, il faut utiliser CREATE PROCEDURE.

    Si c'est une fonction, il faut préciser le type de résultat avec une clause RETURNS avant le BEGIN.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Par défaut ... merci donc :
    Bonjour,

    Merci pour votre réponse.
    Il s'agit bien d'une fonction, pas d'une procédure stockée. Il n'y a pas de valeur retournée, donc je n'ai pas mis de clause "RETURNS <type>".

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    RETURNS est obligatoire pour les fonctions...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Par défaut
    OK, donc j'ai mis à la fin un Ma fonction est :

    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
    DROP FUNCTION IF EXISTS getHours;
     
    DELIMITER //
     
    CREATE FUNCTION getHours()
    	RETURNS BIT;
    	BEGIN
    	DECLARE StartDate DATETIME;
    	DECLARE EndDate DATETIME;
    	DECLARE PreceedingOldValue INT DEFAULT 0;
    	DECLARE PreceedingNewValue INT DEFAULT 0;
     
    (...)
     
    RETURN 1;
    END;
    //
    J'ai la même erreur.
    Je ne vois toujours pas d'où ça peut venir :
    Est-ce qu'il faut supprimer des lignes vides? Est-ce qu'il y a des conditions particulières pour les noms/longueur des variables?

    Merci.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Citation Envoyé par catadanna Voir le message

    J'ai la même erreur.
    Je ne vois toujours pas d'où ça peut venir :
    Est-ce qu'il faut supprimer des lignes vides? Est-ce qu'il y a des conditions particulières pour les noms/longueur des variables?

    Merci.
    Il ne faut pas mettre de point-virgule entre RETURNS et BEGIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DELIMITER //
    CREATE FUNCTION getHours()
     RETURNS BIT
     BEGIN
     DECLARE StartDate DATETIME;
    RETURN 1;
    END;
    //
    Query OK, 0 rows affected (0.00 sec)

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 877
    Par défaut
    Salut à tous.

    En tout cas, cela ne me surprend pas du tout.
    Il y a encore quelques années, chez certains clients (gros système IBM), ils nous étaient interdits de faire des procédures stockées, des jointures car trop coûteux en termes de performances. Cela remonte à plus de vingt-ans.
    Alors on faisait comment ? Et bien on déchargeaient les tables sous forme de fichiers séquentiels et l'on faisait le merge en cobol.
    Je sais, c'était lourd à faire, mais on n'avait pas le choix !

    Maintenant, les systèmes ont évolué et il est de plus en plus rare d'avoir se genre de comportement.
    Il se peut aussi que le DBA n'a pas toute la compétence requise pour la maîtrise de ce qui se passe dans sa boîte. Et par peur, il interdit certains outils.

    @+

Discussions similaires

  1. Error 500 pour mon htaccess
    Par Fleuretta dans le forum Apache
    Réponses: 3
    Dernier message: 08/10/2006, 20h54
  2. configurer php.ini pour fonction mail
    Par michka999 dans le forum Apache
    Réponses: 4
    Dernier message: 06/09/2006, 14h13
  3. Besoin d'aide pour fonctions OpenSSL..... HELP !!!
    Par aide64 dans le forum Langage
    Réponses: 7
    Dernier message: 12/05/2006, 17h46
  4. [VBA-E] référence Pour fonction Excel
    Par illight dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 19/04/2006, 14h29
  5. Debutant en C cherche aide pour fonctions!!!!
    Par benji17c dans le forum C
    Réponses: 5
    Dernier message: 30/09/2003, 12h47

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