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 :

Qui ne fait pas ce qu'elle est censée faire


Sujet :

SQL Procédural MySQL

  1. #1
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut Qui ne fait pas ce qu'elle est censée faire
    Bonjour tout le monde !!

    Un petit probème avec une procédure stockée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    delimiter //
    CREATE PROCEDURE raise_error (
    p_msg VARCHAR(50))
    BEGIN
    DECLARE _msg TINYINT;
     
    -- Force an error to be raised by assigning a string to an
    -- integer variable. The string will appear on the client.
    SET _msg = p_msg ;
    SELECT _msg;
    END//
     
    delimiter ;
    Ceci est donc censé me lancer une erreur lorsque je fais CALL raise_error('Coucou');

    Hors il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    En mettant le SELECT _msg je me suis aperçu que ma variable avait pris la valeur 0. Y'a t il un moyen d'empêcher ca pour que je puisse avoir mon erreur
    C'est peut etre un paramètre ....

    Merci pour vos réponses

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    C'est un problème de @@sql_mode... ta proc ne marchera que si elle tourne en mode strict ; autrement (disons "en mode laxiste"), elle ne génère qu'un warning et non une erreur.

    Les procs stocks tournent toujours avec le @@sql_mode en vigueur au moment de leur création. Pour connaître le @@sql_mode de ta procédure, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE PROCEDURE raise_error \G
    Ton @@sql_mode sera probablement vide.

    Voici maintenant comment faire fonctionner ta procédure :
    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
     
    drop PROCEDURE if exists raise_error ;
    -- la proc sera re-créée avec le Strict Mode
    set @@sql_mode = 'STRICT_ALL_TABLES' ;
    delimiter //
    CREATE PROCEDURE raise_error (
    p_msg VARCHAR(50))
    BEGIN
    DECLARE _msg TINYINT;
     -- Force an error to be raised by assigning a string to an
    -- integer variable. The string will appear on the client.
    SET _msg = p_msg ;
    SELECT _msg;
    END //
    delimiter ;
    Tu peux maintenant vérifier que ta procédure déclenche bien une erreur, même en restaurant le @@sql_mode antérieur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    set @@sql_mode = '' ;
    call raise_error('coucou');
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Merci bcp . Ca marche mieux comme ca

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/02/2008, 14h41
  2. Réponses: 1
    Dernier message: 20/06/2007, 18h03
  3. [Système] bouton qui ne fait pas se que je veut
    Par schats dans le forum Langage
    Réponses: 2
    Dernier message: 27/04/2007, 12h17
  4. Réponses: 2
    Dernier message: 21/04/2006, 15h32
  5. [debutant] page html qui ne fait pas fonctionner la fonction
    Par Battosaiii dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/03/2006, 20h25

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