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 :

[mysql5][function][erreure 1418]syntaxe qui marche sur base de dev et pas sur prod.


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut [mysql5][function][erreure 1418]syntaxe qui marche sur base de dev et pas sur prod.
    Bonjours, je suis en train de basculer les procedures stockées et les fonctions developpées par d'autres personnes vers la base de prod.

    je rencontre actuellement un pb avec cette 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    DELIMITER $$;
     
    DROP FUNCTION IF EXISTS `xxxxx`.`getCatlibOfForm`$$
     
    CREATE DEFINER=`xxxx`@`%` FUNCTION `getCatlibOfForm`(pformid int(6), plangid varchar(2)) RETURNS text
    BEGIN
    DECLARE done INT DEFAULT 0;                
    declare childid int(6);
    declare parid int(6);
    declare childlib varchar(255);
    declare parentlib varchar(255);
    declare scat cursor for 
    	select SksCatid 
    	from sksformcategorie fc 
    	where fc.SkfFormId=pformid;
    declare cat cursor for 
    	select c.parentId, ct.SksCatLibelle 
    	from (skscategorie as c left join  traduction_skscategorie as ct on c.SksCatid=ct.SksCatid and ct.langueId=plangid)
    	where c.SksCatid=childid;
    	/* select parentId,SksCatLibelle from skscategorie c where c.SksCatid=childid; */
    declare surcat cursor for 
    	select SksCatLibelle 
    	from traduction_skscategorie ct 
    	where (ct.SksCatid=parid AND ct.langueId=plangid);
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;     
    OPEN scat;
    FETCH scat INTO childid;
    CLOSE scat;
    OPEN cat;
    FETCH cat INTO parid,childlib;
    CLOSE cat;
    OPEN surcat;
    FETCH surcat INTO parentlib;
    CLOSE surcat;
    RETURN CONCAT(parentlib," ",childlib);
    END$$
     
    DELIMITER ;$$
    lorsque je lance cette instruction, j'ai l'erreure suivante :
    Error Code : 1418
    This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
    savez vous d'ou peut provenir cette erreure sachant que su le serveur de dev. la fonction ne pose aps de pb. ....?

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Ca vient d'une différence de versions entre les 2 serveurs et/ou que le log binaire est activé sur l'un et pas l'autre. Avec la version sur ton serveur de prod il faut indiquer la nature de la fonction (plutôt READS SQL DATA dans ton cas) au moment où tu la crées pour que le serveur sache quoi faire avec au niveau du log.

    Cf la doc :

    When you create a stored function, you must declare either that it is deterministic or that it does not modify data. Otherwise, it may be unsafe for data recovery or replication. Two sets of function characteristics apply here:

    * The DETERMINISTIC and NOT DETERMINISTIC characteristics indicate whether a function always produces the same result for given inputs. The default is NOT DETERMINISTIC if neither characteristic is given, so you must specify DETERMINISTIC explicitly to declare that a function is deterministic.

    Use of the NOW() function (or its synonyms) or RAND() does not necessarily make a function non-deterministic. For NOW(), the binary log includes the timestamp and replicates correctly. RAND() also replicates correctly as long as it is invoked only once within a function. (You can consider the function execution timestamp and random number seed as implicit inputs that are identical on the master and slave.)

    SYSDATE() is not affected by the timestamps in the binary log, so it causes stored routines to be non-deterministic if statement-based logging is used. This does not occur if the server is started with the --sysdate-is-now option to cause SYSDATE() to be an alias for NOW().
    * The CONTAINS SQL, NO SQL, READS SQL DATA, and MODIFIES SQL DATA characteristics provide information about whether the function reads or writes data. Either NO SQL or READS SQL DATA indicates that a function does not change data, but you must specify one of these explicitly because the default is CONTAINS SQL if no characteristic is given.
    Pensez au bouton

  3. #3
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    merci, j'avait lut la doc, mais n'avait pas trouvé ce point (j'en etait a : )
    Une fonction est considérée comme ``déterministe'' si elle retourne toujours le même résultat pour les mêmes paramètres d'entrée. Sinon, elle est considérée comme ``non déterministe''. L'optimiseur peut utiliser cette propriété. Actuellement, l'attribut DETERMINISTIC est accepté, mais il n'est pas encore utilisé.

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    On dirait que cette page du manuel n'existe pas en français. Personnellement j'utilise toujours la version anglaise qui est la plus à jour
    Pensez au bouton

  5. #5
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    encore une fois, merci

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 06/10/2011, 00h11
  2. [aide svp] Create function => erreur de syntaxe.
    Par Draz34 dans le forum Développement
    Réponses: 1
    Dernier message: 25/01/2009, 18h55
  3. Réponses: 6
    Dernier message: 19/02/2007, 15h50
  4. pas d'erreur mais update qui marche pas
    Par gloppy dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/12/2006, 15h49
  5. [javascript] Erreur de syntaxe qui m'énerve !!!!
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 23/08/2005, 10h22

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